Несколько кубов - Papervision3D - PullRequest
       3

Несколько кубов - Papervision3D

0 голосов
/ 23 декабря 2010

Я нашел пример добавления текстуры в куб

То, что я хочу, это иметь 3 куба подряд, а также иметь возможность размещать их дальше сзади (ось x), но я действительно мало знаю о papervision3d. Я просто изменил текстуры, и все. Вот код:

http://www.kelvinluck.com/assets/papervision3d/cube_tweaks/

package
{
 import flash.display.Bitmap;
 import flash.display.BitmapData;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.KeyboardEvent;
 import org.papervision3d.cameras.Camera3D;
 import org.papervision3d.materials.BitmapMaterial;
 import org.papervision3d.materials.BitmapFileMaterial;
 import org.papervision3d.materials.MaterialsList;
 import org.papervision3d.objects.DisplayObject3D;
 import org.papervision3d.scenes.Scene3D;
 import org.papervision3d.objects.Collada;
 import org.papervision3d.core.proto.DisplayObjectContainer3D;
 import org.papervision3d.objects.Cube;
 import org.papervision3d.materials.ColorMaterial;

 public class PapervisionCubeSides extends Sprite
 {

  private var container:Sprite;
  private var scene:Scene3D;
  private var camera:Camera3D;
  private var rootNode:DisplayObject3D;
  private var ml:MaterialsList = new MaterialsList();
  private var customcube:Cube;

  public function PapervisionCubeSides()
  {
   init3D();
   addEventListener(Event.ENTER_FRAME, Timeline);
  }

  private function init3D():void {
   container = new Sprite();
   addChild( container );   
   container.x = stage.stageWidth * .5;
   container.y = stage.stageHeight * .5;
   scene = new Scene3D( container );
   camera = new Camera3D();
   camera.zoom = 10;

   rootNode = scene.addChild( new DisplayObject3D("rootNode") );

   var ml:MaterialsList = new MaterialsList();
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face1');
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face2');
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face3');
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face4');
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face5');
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face6');

   customcube = new Cube( ml, 280, 280, 280, 1, 1, 1 );

   rootNode.addChild( customcube, "myCube01" );
  }

  private function Timeline( event:Event ):void {
   var screen:DisplayObject3D = this.scene.getChildByName("rootNode");
   var rotationY:Number = -(this.mouseX / this.stage.stageWidth * 275);
   var rotationX:Number = -(this.mouseY / this.stage.stageHeight * 275);
   screen.rotationY += (rotationY - screen.rotationY) / 12;
   screen.rotationX += (rotationX - screen.rotationX) / 12;

   this.scene.renderCamera(this.camera);
  }
 }
}

спасибо за помощь

1 Ответ

1 голос
/ 23 декабря 2010

вы бы добавили 3 кубика так же, как если бы вы добавили 1 куб, если честно. Вы можете сделать базовый цикл for и использовать итератор для увеличения позиции:

package
{
 import flash.display.Bitmap;
 import flash.display.BitmapData;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.KeyboardEvent;
 import org.papervision3d.cameras.Camera3D;
 import org.papervision3d.materials.BitmapMaterial;
 import org.papervision3d.materials.BitmapFileMaterial;
 import org.papervision3d.materials.MaterialsList;
 import org.papervision3d.objects.DisplayObject3D;
 import org.papervision3d.scenes.Scene3D;
 import org.papervision3d.objects.Collada;
 import org.papervision3d.core.proto.DisplayObjectContainer3D;
 import org.papervision3d.objects.Cube;
 import org.papervision3d.materials.ColorMaterial;

 public class PapervisionCubeSides extends Sprite
 {

  private var container:Sprite;
  private var scene:Scene3D;
  private var camera:Camera3D;
  private var rootNode:DisplayObject3D;
  private var ml:MaterialsList = new MaterialsList();
  private var customcube:Cube;

  public function PapervisionCubeSides()
  {
   init3D();
   addEventListener(Event.ENTER_FRAME, Timeline);
  }

  private function init3D():void {
   container = new Sprite();
   addChild( container );   
   container.x = stage.stageWidth * .5;
   container.y = stage.stageHeight * .5;
   scene = new Scene3D( container );
   camera = new Camera3D();
   camera.zoom = 10;

   rootNode = scene.addChild( new DisplayObject3D("rootNode") );

   var ml:MaterialsList = new MaterialsList();
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face1');
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face2');
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face3');
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face4');
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face5');
   ml.addMaterial(new BitmapFileMaterial("ski.jpg"), 'face6');

   for(var i:int = 0 ; i < 3 ; i++){
      customcube = new Cube( ml, 280, 280, 280, 1, 1, 1 );
      customcube.x = (280 + 10) * i
      rootNode.addChild( customcube, "myCube"+i );
   }
  }

  private function Timeline( event:Event ):void {
   var screen:DisplayObject3D = this.scene.getChildByName("rootNode");
   var rotationY:Number = -(this.mouseX / this.stage.stageWidth * 275);
   var rotationX:Number = -(this.mouseY / this.stage.stageHeight * 275);
   screen.rotationY += (rotationY - screen.rotationY) / 12;
   screen.rotationX += (rotationX - screen.rotationX) / 12;

   this.scene.renderCamera(this.camera);
  }
 }
}
...