Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Во всех 3D движках такие тормоза? (http://www.flasher.ru/forum/showthread.php?t=187221)

billion 16.11.2012 12:30

никак не могу прикрутить away к Flash Builder.... пустой экран получается.... подскажите плиз что делаю не так?

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                          xmlns:s="library://ns.adobe.com/flex/spark"
                          xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
                          creationComplete="application1_creationCompleteHandler(event)">
 
        <mx:UIComponent id="ui" width="100%" height="100%"/>
 
        <s:BorderContainer width="100%" height="100%">
                <s:SpriteVisualElement id="sv" width="100%" height="100%"/>
        </s:BorderContainer>
 
        <s:TextArea id="txt" width="200" height="100" left="0" verticalCenter="0"/>
 
        <fx:Script>
                <![CDATA[
                        import mx.events.FlexEvent;
 
                        protected function application1_creationCompleteHandler(event:FlexEvent):void
                        {
                                var ss:Basic_View = new Basic_View();
                                sv.addChild(ss);
                        }
 
                ]]>
        </fx:Script>
 
 
 
</s:Application>

Код AS3:

package 
{
        import away3d.containers.*;
        import away3d.entities.*;
        import away3d.materials.*;
        import away3d.primitives.*;
        import away3d.utils.*;
 
        import flash.display.*;
        import flash.events.*;
        import flash.geom.Vector3D;
 
        [SWF(backgroundColor="#000000", frameRate="60")]
 
        public class Basic_View extends Sprite
        {
                //plane texture
                [Embed(source="/embeds/floor_diffuse.jpg")]
                public static var FloorDiffuse:Class;
 
                //engine variables
                private var _view:View3D;
 
                //scene objects
                private var _plane:Mesh;
 
                /**
                * Constructor
                */

                public function Basic_View()
                {
                        addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(event:Event=null):void {
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                        stage.align = StageAlign.TOP_LEFT;
 
                        //setup the view
                        _view = new View3D();
                        addChild(_view);
 
                        //setup the camera
                        _view.camera.z = -600;
                        _view.camera.y = 500;
                        _view.camera.lookAt(new Vector3D());
 
                        //setup the scene
                        _plane = new Mesh(new PlaneGeometry(700, 700), new TextureMaterial(Cast.bitmapTexture(FloorDiffuse)));
                        _view.scene.addChild(_plane);
 
                        //setup the render loop
                        addEventListener(Event.ENTER_FRAME, _onEnterFrame);
                        stage.addEventListener(Event.RESIZE, onResize);
                        onResize();
                }
 
                /**
                * render loop
                */

                private function _onEnterFrame(e:Event):void
                {
                        _plane.rotationY += 1;
 
                        _view.render();
                }
 
                /**
                * stage listener for resize events
                */

                private function onResize(event:Event = null):void
                {
                        _view.width = stage.stageWidth;
                        _view.height = stage.stageHeight;
                }
        }
}

Добавлено через 21 минуту
хмм... прикрутил к флэшу - работает. а в билдере ни в какую

Tails 16.11.2012 13:05

Цитата:

Сообщение от bifidokk (Сообщение 1104658)
конечно! вы еще делайте import * будет вам больше 10мб)

Директива import не внедряет сама по себе классы, она лишь делает их "видимыми" для использования.

billion 16.11.2012 13:19

во флэше 3000 кубиков при постоянном вращении дают 15 фпс. уже лучше. но что-то меня берут сомнения. это предел?

Aquahawk 16.11.2012 14:00

Цитата:

import *
Значения не имеет, компилится только то что реально используется

Hauts 16.11.2012 14:01

Цитата:

хм.... альтернатива сразу отпала. слишком тяжёлая. 10 метров.
Шутите? 10 Метров? Может архив 10 метров, а не сам движок?

Насчет кубиков на сайте у меня есть демка. Там около 500 объектов + 4 источника освещения + одна тень. На среднем ноуте (моём) выдает около 30 фпс.

Sintesis 16.11.2012 16:06

Цитата:

Сообщение от Hauts (Сообщение 1104689)
Шутите? 10 Метров? Может архив 10 метров, а не сам движок?

Насчет кубиков на сайте у меня есть демка. Там около 500 объектов + 4 источника освещения + одна тень. На среднем ноуте (моём) выдает около 30 фпс.

Почему так мало? вы каждую модель отдельно добавляете? Могу сделать 50 000 кубиков и будет 60fps

billion 16.11.2012 16:07

да. :) недосмотрел я в архив. это архив весит 10 метров, а сама библиотека 532 килобайта

Добавлено через 42 секунды
Цитата:

Могу сделать 50 000 кубиков и будет 60fps
будьте добры, сделайте демку во флэш билдере! буду сто раз благодарен!

Добавлено через 16 минут
Цитата:

Там около 500 объектов + 4 источника освещения
Мне для моего проекта необходимо иметь до 5000 объектов на экране. Из них 60% прямоугольно подобные, остальные сложные модели до 1000 полигонов.
Источников освещения 3 макс. При этом у каждого объекта 3-5 материалов.

К сожалению не могу это всё промоделировать. Подскажите, с такими условиями фпс будет хороший на средних компах?

Sintesis 16.11.2012 16:32

Не демку не буду, это сложно и долго, тем более что для Away есть готовые решения. Объясню в чём суть. Все интернет GPU ускоренные технологии этим грешат и флеш и вебГЛ и даже юнити плеер - общение CPU и GPU идёт с большой задержкой по сравнению с приложениями которые стоят локально. Общение это происходит когда отрисовалось содержимое одного буфера вершин и нужно перейти к другому буферу - происходит DrawCall. Вот этих дравколов должно быть как можно меньше. Если мы добавляем объект в контекст как новый объект - он займёт весь буфер и не даст следёющему новому объекту попасть в этот буфер и не важно есть ли в буфере место или нет - каждый новый объект займёт свой отдельный буфер в видеокарте. Таким образом каждый кубик на вашей сцене провоцирует вызов дравкола. Хоть он состоит из 8 вершин, но он у вас занимает целый буфер который может вместит 60 000 вершин вызвав всего 1 дравкол. Так вот можно пихнуть все кубики в один буфер создав из них один объект и с помошью шейдеров вращать их отдельно друг от друга. Есть уже готовые библиотеки для авей и других движков например библиотека по работе с частицами Flint.

Hauts 16.11.2012 16:40

Цитата:

Почему так мало? вы каждую модель отдельно добавляете? Могу сделать 50 000 кубиков и будет 60fps
Мне просто не нужно было больше :)

Sintesis 16.11.2012 16:43

Цитата:

Сообщение от Hauts (Сообщение 1104734)
Мне просто не нужно было больше :)

Счастливый человек, а то все больше и больше хотят...


Часовой пояс GMT +4, время: 03:19.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.