notice: Flash editor updated! Join the development! Thanks to MiniBuilder


embed

FORKED
  1. // forked from sake's Pixel3Dの座標⇒普通のxy座標
  2. /*
  3.    プリミティブオブジェクトのどの頂点が頂点番号何番なのか今一分からないので、
  4.    fork元のsakeさんのコードのShapeをTextFieldにして
  5.    TextFieldの位置を各頂点の座標に合わせ、頂点番号を表示しました。
  6.    クラス化してテスト用に使えるようにしたい。
  7.  */
  8. package
  9. {
  10.     import flash.text.TextField;
  11.     import flash.display.Shape;
  12.     import flash.display.StageQuality;
  13.     import flash.events.Event;
  14.     import org.papervision3d.core.effects.utils.BitmapClearMode;
  15.     import org.papervision3d.core.geom.Pixels;
  16.     import org.papervision3d.core.geom.renderables.Pixel3D;
  17.     import org.papervision3d.core.geom.renderables.Vertex3DInstance;
  18.     import org.papervision3d.core.geom.renderables.Vertex3D;
  19.     import org.papervision3d.materials.WireframeMaterial;
  20.     import org.papervision3d.objects.primitives.*;
  21.     import org.papervision3d.view.BasicView;
  22.     import org.papervision3d.view.layer.BitmapEffectLayer;
  23.     [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="40")]
  24.     public class Main extends BasicView
  25.     {
  26.         private const RADIUS:int=140;
  27.         private var pixels:Pixels;
  28.         private var sphere:Sphere;
  29.         private var ary:Array;
  30.         //private var t:TextField = addChild(new TextField()) as TextField;//確認用
  31.         // コンストラクタ
  32.         public function Main()
  33.         {
  34.             // もろもろの準備
  35.             stage.quality=StageQuality.HIGH;
  36.             super(00truetrue);
  37.             var layer:BitmapEffectLayer=new BitmapEffectLayer(viewport, 465465true0, BitmapClearMode.CLEAR_PRE, true);
  38.             layer.clearBeforeRender=true;
  39.             viewport.containerSprite.addLayer(layer);
  40.             camera.z=-500;
  41.             sphere=new Sphere(new WireframeMaterial(0xdddddd, 0.11), Math.sqrt(RADIUS * RADIUS * 3), 1010);
  42.             sphere.material.doubleSided=true;
  43.             scene.addChild(sphere);
  44.             pixels=new Pixels(layer);
  45.             scene.addChild(pixels);
  46.             
  47.             var verticesNum:uint = sphere.geometry.vertices.length;
  48.             var p:Pixel3D;
  49.             var vertex:Vertex3D;
  50.             for (var v:int = 0; v < verticesNum; v++){
  51.                 vertex = sphere.geometry.vertices[v];
  52.                 p = new Pixel3D(0xFFFFFFFF, vertex.x, vertex.y, vertex.z);
  53.                 pixels.addPixel3D(p);
  54.             }
  55.             ary=[];
  56.             var tf:TextField;
  57.             for (var i:int=0; i < verticesNum; i++)
  58.             {
  59.                 tf = new TextField();
  60.                 tf.textColor = 0xFFFFFF;
  61.                 tf.text = i.toString();
  62.                 addChild(tf);
  63.                 ary[i] = tf;
  64.             }
  65.             // Let's レンダリング!
  66.             startRendering();
  67.             addEventListener(Event.ENTER_FRAME, onFrame);
  68.         }
  69.         // エンターフレーム
  70.         private function onFrame(e:Event):void
  71.         {
  72.             sphere.rotationX=pixels.rotationY+=0.5;
  73.             sphere.rotationY=pixels.rotationX+=0.5;
  74.             // Pixelの座標をスクリーン座標にしてShapeに適用
  75.             // RenderPixels.asを参考にしました。っていうかほぼそのまま。
  76.             var offsetX:Number=stage.stageWidth >> 1;
  77.             var offsetY:Number=stage.stageHeight >> 1;
  78.             var v3d:Vertex3DInstance;
  79.             var i:int=0;   
  80.             for each (var p:Pixel3D in pixels.pixels)
  81.             {
  82.                 v3d=p.vertex3D.vertex3DInstance;
  83.                 
  84.                 if (v3d.visible)
  85.                 {
  86.                     (ary[i] as TextField).x=v3d.x + offsetX;
  87.                     (ary[i] as TextField).y=v3d.y + offsetY;
  88.                     i++;
  89.                 }
  90.             }
  91.         }
  92.     }
  93. }
noswf
Get Adobe Flash Player