そろそろ3Dのお勉強をしてみようとpapervision3dに手をだしてみましたが、なにやら結構大変だったのでやって行ったことを忘れないように残しておく。。。。
ひとまず何か形にできないと勉強できない人間なので、訳も分からず一番簡単な方法で3Dオブジェクトを表示することから始めます。
papervision3dでは、BasicViewやReflectionViewを継承することでオブジェクトの追加のみで簡単に3D空間にオブジェクトを配置できるようになっています。
まずは必要なクラスをimportします。
// 必要なライブラリをインポートします import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.special.CompositeMaterial; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView; import org.papervision3d.core.effects.view.ReflectionView;
次にカメラの位置設定を行う今回はyの位置を200に設定して少し上から見た状態にしました。yを0にするとあとで作成する床がみえません。
//カメラ位置//////////////////////////////////////////////// camera.y = 200;
オブジェクトの作成
//床の作成////////////////////////////////////////////////// /*テクスチャを作成*/ var wm:WireframeMaterial = new WireframeMaterial(); var col:ColorMaterial = new ColorMaterial(0xffffff, 0.5); var co:CompositeMaterial = new CompositeMaterial(); co.addMaterial(wm); co.addMaterial(col); 板状のオブジェクトを作成 引数は(テクスチャ,横方向のポリゴン分割数、縦方向のポリゴン分割数) var floor:Plane = new Plane(co, 1000, 1000, 6, 6); floor.pitch( -90);//90度回転(rotationXでもまわる) //床を3Dシーンに表示(PV3DではsceneにaddChildすることで表示されます) scene.addChild(floor); // 球面を作成/////////////////////////////////////////////// var material: CompositeMaterial = new CompositeMaterial(); material.addMaterial(new WireframeMaterial(0xff6633)); material.addMaterial(new ColorMaterial(0xdcdcdc)); ball = new Sphere(material, 100, 8, 8); ball.y = 100; // 球面を3Dシーンに表示////////////////////////////////////// scene.addChild(ball);
最後にenterFrameでレンダリングを行うことで描画される?のですが、
今回はReflectionViewを継承して作成しているので singleRender();を使用しないと描画されませんでした。
BasicViewの場合はstartRendering();で描画できるのですが、この辺の理解にはまだ届いていません。
今回の作成方法はほぼオブジェクトを作成するだけで簡単に3D表示が行えますが、皆様が仰るようになにをやってるの理解しづらいと思いました。
つぎはもう少し面倒くさい方法で作成し、理解を深める。
それにしてもwonderflは便利ですね。そして文章書くのてかなり面倒だ。でも誰かに理解してもらえるように書くことは自分の理解にもつながるので頑張ってこいつの軌跡を残してみる。


[...] 前回から変更した点は、 BasicViewを使うのでカメラやシーンがBasicViewをnewしたときにカメラやシーン作成される為に、個別に作成する手間はなくなります。 以前、一番簡単な方法で3Dを作成した時はBasicViewクラスを継承して作成しました。この場合もカメラやシーンを生成することなく、 オブジェクトのみを作成すれば良かったわけですが、ようやく意味が分かった気がします。 [...]