Форум 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 15.11.2012 21:56

Во всех 3D движках такие тормоза?
 
решил попробовать 3D движки....

настроил санди 3D и запульнул сразу 500 кубиков на сцену.

удивился фпс.... в среднем 4 фпс :(

собственно вопрос: все движки так тормозят или я что-то не так делаю?

использовал три материала и рендеринг при входе во фрейм:

Код AS3:

package
{
        import com.google.maps.LatLng;
        import com.google.maps.Map3D;
 
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.filters.GlowFilter;
        import flash.geom.Point;
 
        import sandy.core.Scene3D;
        import sandy.core.scenegraph.Camera3D;
        import sandy.core.scenegraph.Group;
        import sandy.core.scenegraph.Shape3D;
        import sandy.materials.Appearance;
        import sandy.materials.ColorMaterial;
        import sandy.materials.WireFrameMaterial;
        import sandy.materials.attributes.GouraudAttributes;
        import sandy.materials.attributes.LightAttributes;
        import sandy.materials.attributes.LineAttributes;
        import sandy.materials.attributes.MaterialAttributes;
        import sandy.materials.attributes.MediumAttributes;
        import sandy.materials.attributes.OutlineAttributes;
        import sandy.materials.attributes.VertexNormalAttributes;
        import sandy.primitive.Box;
        import sandy.primitive.PrimitiveMode;
 
        [Event( name="clicked", type="sandydemo.BoxEvent" )]
 
        public class Boxes extends Sprite
        {
                public var scene:Scene3D;
                private var selectedMenuItem:Shape3D;
                public var arr:Array = [];
                public var camera:Camera3D;
                private var rootik:Group;
 
                public function Boxes()
                {
                        init();
                        addEventListener(Event.ADDED_TO_STAGE, onadded);
                }
 
                protected function onadded(event:Event):void
                {
                        stage.frameRate = 100;
                }
 
                public function setRoll(val:Number):void {
                        camera.roll = -val;
                        scene.render();
                }
 
                public function setCenter(pp:Point, zz:Number, pitch:Number):void {
                        camera.x = -pp.x;
                        camera.y = pp.y;
                        camera.z = -100*Math.pow(2, 18-zz);
                        scene.render();
                }
 
                private function init():void
                {
                        camera = new Camera3D(1920, 1080);
                        camera.x = 0;
                        camera.y = 0;
                        camera.z = -500;
                        camera.lookAt(0, 0, 0 );
 
                        rootik = new Group( "root" );
 
                        scene = new Scene3D("scene", this, camera, rootik );
                        var len:uint = 500;
                        var i:uint = 0;
                        while (i<len) {
                                arr[i] = new Box("red box", Math.random()*200, Math.random()*200, Math.random()*20*10, PrimitiveMode.QUAD, 0 );
                                configureBox(arr[i], 0xff0000, Math.random()*1920, Math.random()*1080 );
                                i++;
                        }
 
                        scene.render();
                }
 
                private function mouseOverHandler( event:MouseEvent ):void
                {
                        var container:Sprite = event.target as Sprite;
                        container.filters = [
                                new GlowFilter( 0xffffff, 1, 12, 12 )
                        ];
                }
 
                private function mouseOutHandler( event:MouseEvent ):void
                {
                        var container:Sprite = event.target as Sprite;
                        container.filters = [];
                }
 
                private function clickHandler( event:MouseEvent ):void
                {
                        var container:Sprite = event.target as Sprite;
                        var currentShape:Shape3D = getShape3DByContainer( container );
                        var boxEvent:BoxEvent = new BoxEvent( BoxEvent.CLICKED );
                        boxEvent.which = currentShape.name;
                        dispatchEvent( boxEvent );
                }
 
                private function getShape3DByContainer( container:Sprite ):Shape3D
                {
                        for each( var shape:Object in scene.root.children )
                        if( shape is Shape3D && shape.container == container )
                                return shape as Shape3D;
 
                        return null;
                }
 
                private function configureBox( item:Shape3D, color:uint, x:int, y:int ):void
                {
                        var mattAttr:MaterialAttributes = new MaterialAttributes(
                                new LightAttributes(false, 0.5),
                                new OutlineAttributes(3, 0xff0000, 1),
                                new LineAttributes(1, 0, 1)
                        );
 
                        item.appearance = new Appearance(
                                new ColorMaterial(color, 0.5, mattAttr)
                        );
                        item.appearance.frontMaterial.lightingEnable = true;
 
                        item.x = x;
                        item.y = y;
                        item.rotateZ = Math.random()*180;
                        item.container.addEventListener( MouseEvent.MOUSE_OVER, mouseOverHandler );
                        item.container.addEventListener( MouseEvent.MOUSE_OUT, mouseOutHandler );
                        item.container.addEventListener( MouseEvent.CLICK, clickHandler );
                        item.container.useHandCursor = true;
                        item.container.buttonMode = true;
 
                        scene.root.addChild(item);
                }
        }
}

Код AS3:

boxes = new Boxes();
                                spriteContainer.addChild(boxes);
                                addEventListener(Event.ENTER_FRAME, onvch);
                                spriteContainer.addChild(new Stats());
 
 
                        protected function onvch(event:*):void
                        {
                                boxes.setCenter(new Point(mouseX-1500, mouseY), 14, 0);
                        }


Sintesis 15.11.2012 22:11

Да ты не то делаешь), ты используешь мёртвый движок, который много лет не обновлялся. Сейчас есть новое поколение движков Away 4 и Alternativa3D 8 например, они используют новую особенность нового 11-го флеш плеера, который может обрабатывать 3D графику при помощи видеокарты.

billion 15.11.2012 22:15

аааа.... а я мучаюсь блин. спасибо. ща поищю примеры....

Sintesis 15.11.2012 22:21

http://away3d.com/, http://alternativaplatform.com/ru/
Вот официальные сайты, спасибо можно в рейтинг поставить) зелёный плюсик такой над сообщением.
Для браузерной графики есть ещё и очень навороченый http://unity3d.com/ но чтоб на нём писать нормальные игры нужно сишарп знать хотя-бы.

billion 15.11.2012 22:42

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

Sintesis 15.11.2012 22:50

Цитата:

Сообщение от billion (Сообщение 1104612)
хм.... альтернатива сразу отпала. слишком тяжёлая. 10 метров.

Ха) она-ж не вся будет в проект вкомпиливаться.

billion 15.11.2012 23:01

как это не вся, если swc подключается к проекту. кстати есть рабочие примеры с away3D? а то в их туториалых заблудился совсем

Sintesis 15.11.2012 23:11

Цитата:

Сообщение от billion (Сообщение 1104616)
как это не вся, если swc подключается к проекту.

Ну и что? Ты-ж не встраиваешь её, а используешь как библиотеку классов.
На Away примеров нет, давно с ней не работал, хотя советую именно Away.

illuzor 15.11.2012 23:28

Цитата:

как это не вся, если swc подключается к проекту
В скомпилированный swf зашиваются только те классы, которые используются в проекте.
Насколько я помню, альтернатива добавляет килобайт 300 к проекту.

Примеры away3d есть - https://github.com/away3d/away3d-examples-fp11

bifidokk 16.11.2012 08:44

Цитата:

Сообщение от billion (Сообщение 1104616)
как это не вся, если swc подключается к проекту.

конечно! вы еще делайте import * будет вам больше 10мб)
у меня проект с кучей заембеденной графы и кучей кода с использованием альтернативы - 3мб флешка


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

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