※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!
wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)
pv3dカメラのターゲット設定時の仕様のようですね。気づかせてくれてありがとうございます。Thankyou!
forked from: PV3D でマルチビュー(問題点あり) forked from: forked from: PV3D でマルチビュー(問題点あり)
- // forked from JohnBrookes's forked from: PV3D でマルチビュー(問題点あり)
- // forked from tkinjo's PV3D でマルチビュー(問題点あり)
- package
- {
- /**
- * cameras[ 0 ] は座標 x = 0; y = 1000; z = 0; にあり、DisplayObject3D.ZERO をターゲットとして設定しています。
- * しかし、z = 0、x = 0 のときはターゲットの方向にカメラを向けることができない仕様(バグ?)になっているようです。
- * 理由は、x = 0 で固定したまま、z を -1 から 0、1 へと変更するときにカメラの向きが y 軸を中心に反転してしまうためのようです。
- * その反転する境界である z = 0 のときはユーザーがカメラの向きを設定する必要があるようで。
- *
- * 気づかせてくれた JohnBrookes さん、ありがとうございました。
- * Thankyou!
- *
- *
- *
- * --- もうひとつ検証 ---
- * PV3D でマルチビュー(問題点あり)の問題が起こる過程を再現
- * http://wonderfl.kayac.com/code/225f3df8bffa868aaad5f127b043dcdee0b75cf8
- */
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.events.TimerEvent;
- import flash.text.TextField;
- import flash.text.TextFieldAutoSize;
- import flash.utils.Timer;
- import org.papervision3d.cameras.Camera3D;
- import org.papervision3d.core.proto.CameraObject3D;
- import org.papervision3d.core.proto.SceneObject3D;
- import org.papervision3d.materials.ColorMaterial;
- import org.papervision3d.materials.utils.MaterialsList;
- import org.papervision3d.materials.WireframeMaterial;
- import org.papervision3d.objects.DisplayObject3D;
- import org.papervision3d.objects.primitives.Cube;
- import org.papervision3d.render.BasicRenderEngine;
- import org.papervision3d.view.Viewport3D;
- [SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "#ffffff")]
- /**
- * ...
- * @author tkinjo
- */
- public class Main extends Sprite
- {
- /**
- *
- */
- private var scene:SceneObject3D;
- private var renderer:BasicRenderEngine;
- private var viewports:Vector.<Viewport3D>;
- private var cameras:Vector.<CameraObject3D>;
- private var cube:Cube;
- private var textField:TextField;
- private var timer:Timer;
- /**
- *
- */
- public function Main()
- {
- scene = new SceneObject3D();
- renderer = new BasicRenderEngine();
- viewports = new Vector.<Viewport3D>();
- cameras = new Vector.<CameraObject3D>();
- for ( var i:uint = 0; i < 4; i++ ) {
- var viewport:Viewport3D = new Viewport3D( stage.stageWidth / 2, stage.stageHeight/ 2 );
- viewport.x = stage.stageWidth / 2 * ( i % 2 );
- viewport.y = stage.stageHeight / 2 * uint( i / 2 );
- var camera:CameraObject3D = new Camera3D();
- camera.target = DisplayObject3D.ZERO;
- camera.z = 0;
- camera.zoom = 115;
- viewports.push( viewport );
- cameras.push( camera );
- addChild( viewport );
- }
- cameras[ 0 ].y = 1000;
- //cameras[0].target = null;
- //cameras[ 0 ].z = 0; // 0 だと表示されない。なぜ?
- //cameras[0].rotationX=90;
- cameras[ 1 ].x = 1000;
- cameras[ 1 ].y = 1000;
- cameras[ 2 ].z = 1000;
- cameras[ 3 ].x = 1000;
- /**
- * キューブの作成
- *
- * キューブのコンストラクタ
- * http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/objects/primitives/Cube.html#Cube()
- */
- var cubeMaterialParams:Array = [
- { name:"front", color:0xff0000 },
- { name:"back", color:0xffff00 },
- { name:"right", color:0x00ff00 },
- { name:"left", color:0x00ffff },
- { name:"top", color:0x0000ff },
- { name:"bottom", color:0xff00ff }
- ];
- var cubeMaterialsList:MaterialsList = new MaterialsList();
- for ( i = 0; i < 6; i++ ) {
- var colorMaterial:ColorMaterial = new ColorMaterial( cubeMaterialParams[ i ].color );
- //var colorMaterial:ColorMaterial = new ColorMaterial( cubeMaterialParams[ i ].color, 0.5 );
- colorMaterial.doubleSided = true; // true にすると辺のふちが欠ける
- cubeMaterialsList.addMaterial( colorMaterial, cubeMaterialParams[ i ].name );
- }
- cube = new Cube( cubeMaterialsList, 100, 100, 100 );
- scene.addChild( cube );
- /**
- * 問題点に関するテキストフィールド
- */
- textField = new TextField();
- textField.autoSize = TextFieldAutoSize.LEFT;
- addChild( textField );
- var timer:Timer = new Timer( 3000 );
- var timerHandler:Function = function( event:TimerEvent ):void { changeZ(); };
- timer.addEventListener( TimerEvent.TIMER, timerHandler );
- timer.start();
- stage.addEventListener( MouseEvent.CLICK, function( event:MouseEvent ):void {
- if ( timer ) {
- timer.removeEventListener( TimerEvent.TIMER, timerHandler );
- timer = null;
- }
- changeZ();
- } );
- /**
- *
- */
- addEventListener(Event.ENTER_FRAME, enterFrameHandler );
- }
- /**
- *
- * @param event
- */
- private function changeZ():void {
- if ( cameras[ 0 ].z != 1 )
- cameras[ 0 ].z ++;
- else
- cameras[ 0 ].z = -1;
- }
- /**
- *
- * @param event
- */
- private function enterFrameHandler( event:Event ):void {
- cube.rotationY++;
- for ( var i:uint = 0; i < 4; i++ ) {
- renderer.renderScene( scene, cameras[ i ], viewports[ i ] );
- }
- textField.text = "クリックで cameras[ 0 ].z の値を変更。" +
- "\ncameras[ 0 ].z = " + cameras[ 0 ].z +
- "\ncameras[ 0 ].rotationX = " + cameras[ 0 ].rotationX +
- "\ncameras[ 0 ].rotationY = " + cameras[ 0 ].rotationY +
- "\ncameras[ 0 ].rotationZ = " + cameras[ 0 ].rotationZ;
- }
- }
- }
notice:



