. .
CREATE OR DIE Special Downloads Shop webinale

Schauplatz

Artikel
  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Oktober 2007

Papervision3D, Flash und Konsorten


Fortsetzung, Teil 2

(Link zum Artikel: http://www.createordie.de/cod/artikel/1319)

Das ist alles?
Wie schon erwähnt, sind in dem 3D-Austauschformat auch Verweise auf Settings und Texturen des Modells vorhanden. Auch diese Informationen kann Papervision3D beim Import direkt nutzen und wendet beispielsweise vorhandene Referenzierungen auf Texturen direkt an. Komfortabler kann man nun wirklich nicht bedient werden, oder?

Einmal rendern, bitte
Jetzt, da unser Set auch seinen wichtigsten Darsteller bekommen hat, müssen wir nur noch die Kamera einschalten, und das war dann auch schon der ganze Zauber. renderCamera sind hierbei die Schlüsselworte, die wir der Einfachheit halber in einem ENTER_FRAME–Event verpackt haben, um sie ständig wiederholt auszuführen, sprich, um ständig ein neues Abbild des Modells je nach Drehung, Neigung und Position zu rendern.

Um alle Ecken und Kanten unserer Figur betrachten zu können, habe ich diese noch in Abhängigkeit zur Mausposition gesetzt, sodass durch vertikale bzw. horizontale Bewegungen der Maus die Figur entsprechend gedreht wird.

  1. function render3D( event:Event ) {
  2. camera.x = ( ( -container.mouseX *5 ) –
  3. camera.x ) / 10;
  4. camera.y = ( ( -container.mouseY *5 ) –
  5. camera.y ) / 10;
  6. rootNode.rotationY = camera.x;
  7. rootNode.rotationX = camera.y;
  8. rootNode.rotationZ = camera.z;
  9. // render scene
  10. this.scene.renderCamera(camera);
  11. }

Die FLV-Flimmerkiste
Das Potenzial der Papervision3D Engine ist an dieser Stelle aber noch lange nicht ausgeschöpft. In einem nächsten Schritt verwenden wir Flash-Videos (FLVs) quasi als Texturen für unsere 3D-Objekte und erstellen uns kurzerhand eine kleine Flimmerkiste.

  1. // klassen importieren
  2. import flash.display.BitmapData;
  3. import flash.media.Video;
  4. import flash.net.NetConnection;
  5. import flash.net.NetStream;
  6. import flash.geom.Rectangle;
  7. import flash.geom.Point;
  8. // vartypes definieren
  9. var nConnect : NetConnection;
  10. var nStream : NetStream;
  11. var fVideo : Video;
  12. var vidSprite : Sprite;
  13. var pln0 :DisplayObject3D;
  14. var pln1 :DisplayObject3D;
  15. var pln2 :DisplayObject3D;
  16. var pln3 :DisplayObject3D;
  17. var pln4 :DisplayObject3D;
  18. var pln5 :DisplayObject3D;
  19. var vW : Number = 320;
  20. var vH : Number = 240;
  21. var vidTexture : BitmapData = new BitmapData(
  22. vW, vH );
  23. var bmpData : BitmapData;
  24. var srcRect1 : Rectangle = new Rectangle(
  25. 0,0,(vW/2),vH);
  26. var pnt : Point = new Point(0,0);
  27. var cstmClient :Object = new Object();
  28. cstmClient.onCuePoint = cuePointHandler;
  29. cstmClient.onMetaData = metaDataHandler;
  30. function cuePointHandler(infObj:Object) {
  31. trace("cuePoint");
  32. }
  33. function metaDataHandler(infObj:Object) {
  34. trace("metaData");
  35. }
  36. function loadVideo() {
  37. fVideo = new Video();
  38. nConnect = new NetConnection();
  39. nConnect.connect( null );
  40. nStream = new NetStream( nConnect );
  41. nStream.client = cstmClient;
  42. fVideo.attachNetStream( nStream );
  43. nStream.play("emitter.flv");
  44. }
  45. loadVideo();

Hierzu streamen wir zuerst ein Flashvideo (FLV) via NetConnection() und NetStream() direkt in unsere Anwendung. Um das Video zeichnen und damit anzeigen zu können, erstellen wir uns noch ein Paar einfache Flächen (sechs Stück an der Zahl) und bereiten jede einzelne darauf vor, mit einem BitmapMaterial ausgestattet zu werden. Dieses Material wird wiederum von einem BitmapData-Container als Quelle gespeist, in dem wir letztlich kontinuierlich den Videostream zeichnen.

  1. function initPlanes() {
  2. bmpData = new BitmapData(fVideo.width,
  3. fVideo.height);
  4. var pln0 = rootNode.addChild(
  5. new Plane( new BitmapMaterial
  6. (bmpData),300,300),"Plane0");
  7. var pln1 = rootNode.addChild(
  8. new Plane( new BitmapMaterial
  9. (bmpData),300,300),"Plane1");
  10. var pln2 = rootNode.addChild(
  11. new Plane( new BitmapMaterial
  12. (bmpData),300,300),"Plane2");
  13. var pln3 = rootNode.addChild(
  14. new Plane( new BitmapMaterial
  15. (bmpData),300,300),"Plane3");
  16. var pln4 = rootNode.addChild(
  17. new Plane( new BitmapMaterial
  18. (bmpData),300,300),"Plane4");
  19. var pln5 = rootNode.addChild(
  20. new Plane( new BitmapMaterial
  21. (bmpData),300,300),"Plane5");
  22. pln0.rotationX = 90;
  23. pln0.y = -150;
  24. pln1.rotationX = 180;
  25. pln1.z = 150;
  26. pln2.rotationX = -90;
  27. plne2.y = 150;
  28. pln3.z = -150;
  29. pln4.rotationY = 90;
  30. pln4.x = -150;
  31. pln5.rotationY = -90;
  32. pln5.x = 150;
  33. // scene rendern
  34. this.addEventListener(Event.ENTER_FRAME
  35. ,render3D);
  36. }
  37. initPlanes();

 

Kommentare
Bisher keine Kommentare
Neuer Kommentar
  • Gute Kommentare werden belohnt.
  •   (optional)
  •   (Kommentar abonnieren/Gravatar - wird nicht veröffentlicht)
  •    Benachrichtige mich bei nachfolgenden Kommentaren per E-Mail
  • -+
Tags
Werbung
Papervision3D