WEBマスター目指して日々勉強!!
使い方は結構簡単。
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); } } } スポンサーサイト
|
| ホーム |