altenativa3D 8.5.0 cu suport GPU

Intrebari despre Actionscript 3.0

altenativa3D 8.5.0 cu suport GPU

Mesajde ciorty » Vin Mai 06, 2011 9:35 am

Saptamana trecuta a aparut si alternativa3D 8.5.0 cu suport GPU !
Pare in regula , in afara faptului ca varianta asta este mai degraba un "demo, beta, test, minimal......" .
Este scrisa in rusa, are doar vreo 4 exemple, si e multa orbecaiala....

Dar , din nou....pare ok . Daca ai rabdare , trecrerea de la a3d7 este destul de simplista.
Iar rezultatele sunt absolut uimitoare.
Aici am un exemplu de incarcare de obiecte 3D care era imposibil cu o saptamana in urma.
Evident functioneaza DOAR IN FLASH 11 INCUBATOR BUILD.....
In scena nu exista decat texturi elementare aplicate pe obiecte, insa chiar si asa, lighting-ul .."face toti banii"....dand viata si celui mai elementar obiect.
CPU : intre 2 si 5 % maxim


http://mirceadesign.com/df/index.html

sau in varianta identica , dar cu un obiect ceva mai bine texturat
http://mirceadesign.com/df2/index.html

nu stiu cat de repede se incarca...nu are preloader...poate dura intre 3 si 10 secunde
ACCESAREA:
miscare: tastele "W" si "S"
orientare: CLICK AND DRAG

si pentru cine e interesat,
codul folosit de mine:

Cod: Selectaţi tot
package{
   import alternativa.engine3d.core.Camera3D;
   import alternativa.engine3d.core.Object3D;
   import alternativa.engine3d.core.Resource;
   import alternativa.engine3d.core.View;
   import alternativa.engine3d.lights.*;
   import alternativa.engine3d.loaders.ParserA3D;
   import alternativa.engine3d.loaders.ParserCollada;
   import alternativa.engine3d.loaders.TexturesLoader;
   import alternativa.engine3d.materials.ColladaMaterial;
   import alternativa.engine3d.materials.FillMaterial;
   import alternativa.engine3d.materials.TextureMaterial;
   import alternativa.engine3d.materials.VertexLightTextureMaterial;
   import alternativa.engine3d.objects.Mesh;
   import alternativa.engine3d.objects.Surface;
   import alternativa.engine3d.primitives.Box;
   import alternativa.engine3d.resources.BitmapTextureResource;
   import alternativa.engine3d.resources.FileTextureResource;
   import alternativa.engine3d.resources.Geometry;
   import alternativa.engine3d.resources.TextureResource;
   
   import flash.display.Loader;
   import flash.display.Sprite;
   import flash.display.Stage3D;
   import flash.display.StageQuality;
   import flash.events.*;
   import flash.geom.Vector3D;
   import flash.net.URLLoader;
   import flash.net.URLLoaderDataFormat;
   import flash.net.URLRequest;
   
   [SWF(backgroundColor="#333333", frameRate="60", width="1000", height="600")]
   public class Exp5 extends Sprite {
      [Embed(source="texture.jpg")] static private const levelTexture:Class;
      [Embed(source="texture1.jpg")] static private const gunTexture:Class;
      
      private var stage3D:Stage3D;      
      
      private var scene:Object3D = new Object3D();      
      private var cont1 :Object3D = new Object3D()
      private var cont2 :Object3D = new Object3D()
      private var camera:Camera3D;
      
      private var light:OmniLight;
      private var light1:OmniLight;
      
      private var mesh:Mesh;
      private var gunMesh:Mesh;
      
      private var k:Number = new Number()
      private var m:Number = new Number()
      private var pdaX:Number = new Number(0)
      private var pdaY:Number = new Number(0)
      
      private var speed:Number = new Number(0);
      private var marja:Number = new Number(0);
      
      public function Exp5():void {
         stage.quality = StageQuality.BEST
         
         //SCENA SI CAMERA////////////////////////////////////////////////////////////////////////////////////////////
         scene.addChild(cont1)
         cont1.z =200
         cont1.y = 0
         cont1.addChild(cont2)               
         camera = new Camera3D(0.1, 20000);
         camera.view = new View(1000, 600);
         addChild(camera.view);   
         camera.rotationX = Math.PI*3/2;
         camera.fov = -30.3                                 
         cont2.addChild(camera);
         
         //LIGHTUL////////////////////////////////////////////////////////////////////////////////////////////
         light = new OmniLight(0xcccccc, 40000, 40000);
         light.z = 3000
         light.y = -1000
         light.x = 500
         scene.addChild(light);
         
         light1 = new OmniLight(0xcccccc, 40000, 40000);
         light1.z = 3000
         light1.y = 500
         light1.x = -1000
         scene.addChild(light1);
         
         //BAZA////////////////////////////////////////////////////////////////////////////////////////////
         var texture:BitmapTextureResource = new BitmapTextureResource(new levelTexture().bitmapData);
         var material:VertexLightTextureMaterial = new VertexLightTextureMaterial(texture, 1);               
         var loaderCollada:URLLoader = new URLLoader();
         loaderCollada.dataFormat = URLLoaderDataFormat.TEXT;
         loaderCollada.load(new URLRequest("level.DAE"));
         loaderCollada.addEventListener(Event.COMPLETE, chargeObject);         
         function chargeObject(event:Event):void {            
            var parser:ParserCollada = new ParserCollada();
            parser.parse(XML((event.target as URLLoader).data));
            mesh = parser.getObjectByName("level") as Mesh;         
            mesh.setMaterialToAllSurfaces(material);
            scene.addChild(mesh);
            mesh.scaleX = 0.1
            mesh.scaleY = 0.1
            mesh.scaleZ = 0.1
            uploadResources(mesh.getResources());
         }
                  
         //OBIECTUL////////////////////////////////////////////////////////////////////////////////////////////
         var texture1:BitmapTextureResource = new BitmapTextureResource(new gunTexture().bitmapData);
         var material1:VertexLightTextureMaterial = new VertexLightTextureMaterial(texture1, 1);         
         var loaderCollada1:URLLoader = new URLLoader();
         loaderCollada1.dataFormat = URLLoaderDataFormat.TEXT;
         loaderCollada1.load(new URLRequest("gun.DAE"));
         loaderCollada1.addEventListener(Event.COMPLETE, chargeObject1);         
         function chargeObject1(event:Event):void {            
            var parser1:ParserCollada = new ParserCollada();
            parser1.parse(XML((event.target as URLLoader).data));            
            gunMesh = parser1.getObjectByName("gun") as Mesh;         
            gunMesh.setMaterialToAllSurfaces(material1);
            cont2.addChild(gunMesh);
            gunMesh.scaleX = 0.3
            gunMesh.scaleY = 0.3
            gunMesh.scaleZ= 0.3
            gunMesh.x = camera.x - 10
            gunMesh.y = camera.y + 50
            gunMesh.z = camera.z - 5
            gunMesh.rotationX = Math.PI*0.45               
            uploadResources(gunMesh.getResources());
         }
         
         //GPU-REDIRECT////////////////////////////////////////////////////////////////////////////////////////////
         stage3D = stage.stage3Ds[0];
         stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate);
         stage3D.requestContext3D();
         
         //LISTENERS////////////////////////////////////////////////////////////////////////////////////////////
         stage.addEventListener(MouseEvent.MOUSE_DOWN, incepi);
         stage.addEventListener(MouseEvent.MOUSE_UP, ridica)         
         stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedDown);
         stage.addEventListener(KeyboardEvent.KEY_UP, keyPressedUp);   
      }
      
      private function keyPressedDown(evt:KeyboardEvent):void {
         if (evt.keyCode == 87) {marja = 0.1;}
         if (evt.keyCode == 83) {marja = -0.1;}
      }
      
      private function keyPressedUp(evt:KeyboardEvent):void {
         if (evt.keyCode == 87) {marja = -0.0;}
         if (evt.keyCode == 83) {marja = 0.0;}
      }   
      
      private function incepi(event:MouseEvent):void {
         k = pdaX - mouseX/4
         m = pdaY - mouseY/4
         addEventListener(Event.ENTER_FRAME, trage)
         addEventListener(Event.ENTER_FRAME, directionarea);
      }
      
      private function trage(event:Event):void{      
         pdaX = (mouseX/4+ k)   
         pdaY = (mouseY/4 + m)
      }         
      
      private function ridica(event:MouseEvent):void{
         removeEventListener(Event.ENTER_FRAME, trage)
         addEventListener(Event.ENTER_FRAME, mis);
      }
      
      private function mis(event:Event):void{
         pdaX = pdaX-pdaX*0.04
         pdaY = pdaY-pdaY*0.04
      }
      
      private function directionarea(event:Event):void {
         speed = speed +marja
         if(speed>=5){speed = 5}
         if(speed<=0){speed =0}
         
         gunMesh.rotationX -=  (gunMesh.rotationX - (-pdaY*0.004+Math.PI*0.45))*0.2
         gunMesh.rotationY -= (gunMesh.rotationY - pdaX*0.01)*0.1
         
         gunMesh.z -= (gunMesh.z - (camera.z-5 - pdaY*1.0))*0.01
         gunMesh.x -= (gunMesh.x - (camera.x-10 + pdaX*0.3))*0.01
         
         camera.rotationY -= (camera.rotationY - pdaX*0.002)*0.05
         cont2.rotationX -=  (cont2.rotationX + pdaY*0.01)*0.02
         cont1.rotationZ = cont1.rotationZ - pdaX*0.0001
         
         cont1.x = cont1.x - speed*Math.cos(cont2.rotationX)*Math.sin(cont1.rotationZ)
         cont1.y = cont1.y + speed*Math.cos(cont2.rotationX)*Math.cos(cont1.rotationZ)
         cont1.z = cont1.z + speed*Math.sin(cont2.rotationX)
      }
      
      private function uploadResources(resources:Vector.<Resource>):void {
         for each (var resource:Resource in resources) {
            resource.upload(stage3D.context3D);
         }
      }      
      private function onContextCreate(event:Event):void {
         stage3D.removeEventListener(Event.CONTEXT3D_CREATE, onContextCreate);         
         stage.addEventListener(Event.ENTER_FRAME, rendering);
      }
      
      private function rendering(event:Event):void {
         camera.render(stage3D);
      }                  
   }     
}



la obiecte munceste fiecare cum stie , si le construieste fiecare cum crede.
si atentie la configurarea din flex. Respectati fiecare cuvintel din instructiunile din pachetul a3d 8.5.0.
ciorty
 
Mesaje: 166
Membru din: Dum Aug 24, 2008 2:29 pm

Înapoi la ActionScript 3.0

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 1 vizitator

cron