WEBマスター目指して日々勉強!!
スポンサーサイト
|
Papervision3Dで地面に影を付けるためのライブラリが下記でダウンロードができます。
試してみたが、やはり大きなプリミティブ+ビットマップだと動作が重いですね、、 何か良い方法がないものか。。 ▼Shadow Casting http://blog.zupko.info/?p=146 ▼参考ページ http://clockmaker.jp/blog/2008/10/papervison3d_shadow_cubes/ |
papervision3dではベクターテキストを使用することができるが
デフォルトで使用できるフォントは、下記に限られる。 ・HelveticaBold ・HelveticaLight ・HelveticaMedium ・HelveticaRoman まず前提として 下記のクラスでText3Dを使用できること確認。 ------------------------------------------------------------------- package { import flash.events.*; import flash.utils.*; import org.papervision3d.materials.*; import org.papervision3d.materials.special.*; import org.papervision3d.typography.fonts.*; import org.papervision3d.typography.*; import org.papervision3d.view.*; public class Main extends BasicView { public function Main():void { //マテリアルを作成 var material:Letter3DMaterial = new Letter3DMaterial(0x006699); material.doubleSided = true; //ベクターテキストを作成 var font:HelveticaBold = new HelveticaBold(); //ここで表示するフォントの種類を設定 var text3D:Text3D = new Text3D("Papervision3D World", font, material); scene.addChild(text3D); startRendering(); } } } ------------------------------------------------------------------- 「var font:HelveticaBold = new HelveticaBold()」の部分でフォントを変えられるわけです。 そこで、任意のフォントをベクターテキストにする方法をメモる。 大きな手順として、下記の工程を行う。 ●ベクターテキストに使用したいフォントをクラスファイル(.as)にする ●フォントをクラスファイルを編集 ●実行するasを作成 では具体的に見ていこう |
使い方は結構簡単。
papervision3dで生成したプリミティブを 「JBox」「JPlane」「JSphere」のクラスに渡し 物理演算をしてくれるインスタンスを生成する。 そして、 「PhysicsSystem.getInstance().AddBody(インスタンス);」で物理演算の対象に 最後にエンターフレーム内に毎処理を加えれば 一連のアニメーションが描画される。 まだまだわからないことがあるが、、 サンプルはこんな感じ、 package{ import flash.events.Event; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.objects.primitives.Cylinder; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.view.BasicView; import jiglib.physics.PhysicsSystem; import jiglib.math.JNumber3D; import jiglib.math.JMatrix3D; import jiglib.geometry.JBox; import jiglib.geometry.JPlane; import jiglib.geometry.JSphere; public class Main extends BasicView{ public function Main():void { super(550, 400, true, false, "Debug"); camera.y = 1000; //重力設定 デフォルトは(0, -10, 0) 省略可 PhysicsSystem.getInstance().SetGravity(new JNumber3D(0, -10, 0)); var mList:MaterialsList = new MaterialsList(); mList.addMaterial(new WireframeMaterial(0xffffff), "all"); //床 var cubeObj:Cube = new Cube(mList, 1000, 1000, 500, 1, 1, 1, 0, 0); scene.addChild(cubeObj); var ground:JBox = new JBox(cubeObj, false, 1000, 1000, 500); PhysicsSystem.getInstance().AddBody(ground); ground.Material.Restitution = 0.8;//反発力 大きいほどぴょんぴょん ground.Material.StaticFriction = 0.9; //キューブ var cubeObj2:Cube = new Cube(mList, 50, 50, 50, 1, 1, 1, 0, 0); scene.addChild(cubeObj2); var cube:JBox = new JBox(cubeObj2, true, 50, 50, 50); cube.MoveTo(new JNumber3D(0, 1000, 0), JMatrix3D.IDENTITY); PhysicsSystem.getInstance().AddBody(cube); //球 var ballObj:Sphere = new Sphere(null,50,8,6); scene.addChild(ballObj); var ball:JSphere = new JSphere(ballObj, true, 50); ball.MoveTo(new JNumber3D(0, 700, 0), JMatrix3D.IDENTITY); PhysicsSystem.getInstance().AddBody(ball); //いた var planeObj:Plane = new Plane(null, 200, 200, 0, 0); scene.addChild(planeObj); var plane:JPlane = new JPlane(planeObj); plane.MoveTo(new JNumber3D(0, 600, 0), JMatrix3D.rotationX(Math.PI / 2.5)); PhysicsSystem.getInstance().AddBody(plane); startRendering(); addEventListener(Event.ENTER_FRAME, loop); } private function loop(e:Event):void { PhysicsSystem.getInstance().Integrate(0.3); } } } |
BasicViewを継承すれば簡単な記述でpv3dを実行出来る。
が、 詳細設定などを融通を効かせたいときなどある その場合は、 それぞれのプロパティを設定 下記にメモ記載 package { import flash.events.Event; import flash.display.MovieClip; import flash.display.Sprite; //papervision3Dクラスをインポート import org.papervision3d.scenes.*; import org.papervision3d.objects.*; import org.papervision3d.cameras.*; import org.papervision3d.materials.*; import org.papervision3d.objects.primitives.*; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.view.BasicView; import org.papervision3d.view.Viewport3D; public class Hoge extends MovieClip{ private var viewport:Viewport3D; private var scene:Scene3D; private var camera:Camera3D; private var renderer:BasicRenderEngine; private var rootNode:DisplayObject3D; private var plane:Plane; public function Hoge() { addEventListener(Event.ADDED_TO_STAGE, init3D); } private function init3D(e:Event):void { viewport = new Viewport3D(0, 0, true, true); scene=new Scene3D(); camera=new Camera3D(); renderer=new BasicRenderEngine(); rootNode=scene.addChild(new DisplayObject3D("rootNode")); addEventListener(Event.ENTER_FRAME, onFrame); addChild(viewport); camera.zoom=30; camera.focus=200; camera.target = DisplayObject3D.ZERO; var m:WireframeMaterial = new WireframeMaterial(0xffffff); plane = new Plane(m, 100, 100, 0, 0); rootNode.addChild(plane); } public function onFrame(e:Event):void{ renderer.renderScene(scene, camera, viewport); } } } |