スポンサーサイト

-------- | --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PaperVision3D 2.0の回転処理

2008-01-09 | 20:20

PaperVision3D 2.0の各回転処理によってどういう方向に回転するかの確認用

上段左からRotationX, RotationY, RotationZを加算する事による回転、
下段左からroll(), pitch(),yaw()による回転
各軸は赤:X軸、青:Y軸、緑:Z軸

package {
        import flash.display.*;
        import flash.events.*;
        
        import org.papervision3d.core.*;
        import org.papervision3d.core.geom.*;
        import org.papervision3d.core.math.*;
        import org.papervision3d.scenes.* ;
        import org.papervision3d.objects.*;
        import org.papervision3d.objects.primitives.*;
        import org.papervision3d.cameras.*;
        import org.papervision3d.materials.*;
        import org.papervision3d.materials.shadematerials.* ;
        import org.papervision3d.materials.utils.*;
        import org.papervision3d.view.*;
        import org.papervision3d.render.*;
        import org.papervision3d.lights.*;
        import org.papervision3d.materials.special.LineMaterial ;
        
        [SWF(width="600", height="400", frameRate="10", backgroundColor="#ffffff")]
        public class Rotation extends Sprite{
                private var renderer:BasicRenderEngine = new BasicRenderEngine();
                private var viewport:Viewport3D = new Viewport3D(600, 800, false, true);
                private var scene:Scene3D = new Scene3D();
                private var camera:FreeCamera3D = new FreeCamera3D();
                
                private var linkList:Array = [];
                
                private var lines:Array = null;
                
                private var cubes:Array = [];
                
                public function Rotation():void
                {
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                        
                        //viewport.y = 50;
                        addChild(viewport);
                        
                        camera.y = 0;
                        camera.z = -1100;
                        camera.x = 0;
                        camera.focus = 1100;
                        camera.zoom = 1;
                        camera.tilt(5);
                        
                        var greenwire:WireframeMaterial = new WireframeMaterial( 0xff00 );
                        for(var i:int = 0 ; i < 6 ; i++){
                                var cube:Cube = new Cube(new MaterialsList({all:greenwire}), 100, 100, 100);
                                cubes.push(cube);
                                cube.y = Math.floor(i/3) * 300 + 200;
                                cube.x = -300 + 200*(i%3);
                                scene.addChild(cube);
                                
                                cube.roll(30);
                                cube.pitch(30);
                                cube.yaw(30);
                        }
                        
                        showVector();
                        
                        renderer.renderScene(scene, camera, viewport);
                        
                        addEventListener(Event.ENTER_FRAME, rotate);
                        //stage.addEventListener(KeyboardEvent.KEY_DOWN, rotate);
                }
                
                private function rotate(e:*):void{
                        cubes[0].roll(1);
                        cubes[1].pitch(1);
                        cubes[2].yaw(1);
                        cubes[3].rotationX += 1;
                        cubes[4].rotationY += 1;
                        cubes[5].rotationZ += 1;
                        
                        renderer.renderScene(scene, camera, viewport);
                        showVector();
                }
                
                private function showVector():void{
                        if(lines != null){
                                for each(var l:Lines3D in lines){
                                        scene.removeChild(l);
                                }
                        }
                        lines = [];
                        
                        for each(var cube:Cube in cubes){
                                var m:Matrix3D = cube.transform;
                                var xl:Lines3D = new Lines3D(new LineMaterial());
                                scene.addChild(xl);
                                xl.addNewLine(2, cube.x,cube.y,cube.z,
                                                             cube.x + m.n11*100, cube.y + m.n21*100 , cube.z + m.n31*100);
                                lines.push(xl);
                                
                                var yl:Lines3D =  new Lines3D(new LineMaterial(0xff));
                                scene.addChild(yl);
                                yl.addNewLine(2, cube.x,cube.y,cube.z,
                                                             cube.x + m.n12*100, cube.y + m.n22*100 , cube.z + m.n32*100);
                                lines.push(yl);
                                
                                var zl:Lines3D = new Lines3D(new LineMaterial(0xff00));
                                scene.addChild (zl);
                                zl.addNewLine(2, cube.x,cube.y,cube.z,
                                                              cube.x + m.n13*100, cube.y + m.n23*100 , cube.z + m.n33*100);
                                lines.push(zl);
                        }
                        renderer.renderScene(scene, camera, viewport);
                }
        }
}
スポンサーサイト

Comment

Post a comment

Secret

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。