package { import flash.display.*; import flash.events.*; import flash.utils.*; import com.as3dmod.*; import com.as3dmod.modifiers.*; import com.as3dmod.util.*; import com.as3dmod.plugins.pv3d.*; import org.papervision3d.objects.* import org.papervision3d.objects.primitives.*; import org.papervision3d.materials.*; import org.papervision3d.materials.shadematerials.*; import org.papervision3d.view.*; import org.papervision3d.lights.*; [SWF(width = "720", height = "480", frameRate = "60", backgroundColor = "#000000")] public class Main extends BasicView { private var bone :Bend; private var bonePhase :Phase; private var cylinder :DisplayObject3D; private var modifier :ModifierStack; /** * コンストラクター */ public function Main() { // 照明を作成します var pointLight:PointLight3D = new PointLight3D(); pointLight.x = pointLight.y = pointLight.z = 1000; // シリンダーを作成します cylinder = new Cylinder(new PhongMaterial(pointLight, 0xDDDDDD, 0x333333, 10), 100, 800, 16, 16); scene.addChild(cylinder); // as3dmodの設定を行います modifier = new ModifierStack(new LibraryPv3d(), cylinder); bone = new Bend(0, .3); bone.constraint = ModConstant.LEFT; bonePhase = new Phase(); modifier.addModifier(bone); // ついでに床を作成します(必要なかったら以下4行を消してください) var floor:Plane = new Plane(new BitmapFileMaterial("floor.png"), 2000, 2000, 4, 4); floor.rotationX = 90; floor.y = -500; scene.addChild(floor); // レンダリングを開始します startRendering(); } /** * EnterFrame時の処理です * @param event */ protected override function onRenderTick(event:Event = null):void { // as3dmodのパラメーターをアニメートします bonePhase.value += 0.04; bone.force = bonePhase.phasedValue * 1.5; // as3dmodを適用します modifier.apply(); // カメラをぐるぐる回します camera.x = Math.cos(getTimer() / 2000) * 1000; camera.z = Math.sin(getTimer() / 2000) * 1000; camera.y = 300 // PV3Dにレンダリングさせます super.onRenderTick(event); } } }