※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


forked from : tkinjo's PV3D でマルチビュー(問題点あり) [diff(5)]

FAVORITE BY
:
pv3dカメラのターゲット設定時の仕様のようですね。気づかせてくれてありがとうございます。Thankyou!
FORKED

forked from: PV3D でマルチビュー(問題点あり) forked from: forked from: PV3D でマルチビュー(問題点あり) [diff(69)]

  1. // forked from JohnBrookes's forked from: PV3D でマルチビュー(問題点あり)
  2. // forked from tkinjo's PV3D でマルチビュー(問題点あり)
  3. package  
  4. {
  5.     /**
  6.      * cameras[ 0 ] は座標 x = 0; y = 1000; z = 0; にあり、DisplayObject3D.ZERO をターゲットとして設定しています。
  7.      * しかし、z = 0、x = 0 のときはターゲットの方向にカメラを向けることができない仕様(バグ?)になっているようです。
  8.      * 理由は、x = 0 で固定したまま、z を -1 から 0、1 へと変更するときにカメラの向きが y 軸を中心に反転してしまうためのようです。
  9.      * その反転する境界である z = 0 のときはユーザーがカメラの向きを設定する必要があるようで。
  10.      * 
  11.      * 気づかせてくれた JohnBrookes さん、ありがとうございました。
  12.      * Thankyou!
  13.      * 
  14.      * 
  15.      * 
  16.      * --- もうひとつ検証 ---
  17.      * PV3D でマルチビュー(問題点あり)の問題が起こる過程を再現
  18.      * http://wonderfl.kayac.com/code/225f3df8bffa868aaad5f127b043dcdee0b75cf8
  19.      */
  20.     
  21.     import flash.display.Sprite;
  22.     import flash.events.Event;
  23.     import flash.events.MouseEvent;
  24.     import flash.events.TimerEvent;
  25.     import flash.text.TextField;
  26.     import flash.text.TextFieldAutoSize;
  27.     import flash.utils.Timer;
  28.     import org.papervision3d.cameras.Camera3D;
  29.     import org.papervision3d.core.proto.CameraObject3D;
  30.     import org.papervision3d.core.proto.SceneObject3D;
  31.     import org.papervision3d.materials.ColorMaterial;
  32.     import org.papervision3d.materials.utils.MaterialsList;
  33.     import org.papervision3d.materials.WireframeMaterial;
  34.     import org.papervision3d.objects.DisplayObject3D;
  35.     import org.papervision3d.objects.primitives.Cube;
  36.     import org.papervision3d.render.BasicRenderEngine;
  37.     import org.papervision3d.view.Viewport3D;
  38.     
  39.     [SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "#ffffff")]
  40.     /**
  41.      * ...
  42.      * @author tkinjo
  43.      */
  44.     public class Main extends Sprite
  45.     {
  46.         /**
  47.          * 
  48.          */
  49.         private var scene:SceneObject3D;
  50.         private var renderer:BasicRenderEngine;
  51.         
  52.         private var viewports:Vector.<Viewport3D>;
  53.         private var cameras:Vector.<CameraObject3D>;
  54.         
  55.         private var cube:Cube;
  56.         
  57.         private var textField:TextField;
  58.         private var timer:Timer;
  59.         
  60.         /**
  61.          * 
  62.          */
  63.         public function Main() 
  64.         {
  65.             scene = new SceneObject3D();
  66.             renderer = new BasicRenderEngine();
  67.             
  68.             viewports = new Vector.<Viewport3D>();
  69.             cameras = new Vector.<CameraObject3D>();
  70.             for ( var i:uint = 0; i < 4; i++ ) {
  71.                 
  72.                 var viewport:Viewport3D = new Viewport3D( stage.stageWidth / 2, stage.stageHeight/ 2 );
  73.                 viewport.x = stage.stageWidth / 2 * ( i % 2 );
  74.                 viewport.y = stage.stageHeight / 2 * uint( i / 2 );
  75.                 
  76.                 var camera:CameraObject3D = new Camera3D();
  77.                 camera.target = DisplayObject3D.ZERO;
  78.                 camera.z = 0;
  79.                 camera.zoom = 115;
  80.                 
  81.                 viewports.push( viewport );
  82.                 cameras.push( camera );
  83.                 
  84.                 addChild( viewport );
  85.             }
  86.                         
  87.             cameras[ 0 ].y = 1000;
  88.                         //cameras[0].target = null;
  89.             //cameras[ 0 ].z = 0;    // 0 だと表示されない。なぜ?
  90.                         //cameras[0].rotationX=90;
  91.             cameras[ 1 ].x = 1000;
  92.             cameras[ 1 ].y = 1000;
  93.             cameras[ 2 ].z = 1000;
  94.             cameras[ 3 ].x = 1000;
  95.             
  96.             /**
  97.              * キューブの作成
  98.              * 
  99.              * キューブのコンストラクタ
  100.              * http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/objects/primitives/Cube.html#Cube()
  101.              */
  102.             var cubeMaterialParams:Array = [ 
  103.                     { name:"front", color:0xff0000 }, 
  104.                     { name:"back", color:0xffff00 }, 
  105.                     { name:"right", color:0x00ff00 }, 
  106.                     { name:"left", color:0x00ffff }, 
  107.                     { name:"top", color:0x0000ff },
  108.                     { name:"bottom", color:0xff00ff } 
  109.                 ];
  110.             var cubeMaterialsList:MaterialsList = new MaterialsList();
  111.             for ( i = 0; i < 6; i++ ) {
  112.                 var colorMaterial:ColorMaterial = new ColorMaterial( cubeMaterialParams[ i ].color );
  113.                 //var colorMaterial:ColorMaterial = new ColorMaterial( cubeMaterialParams[ i ].color, 0.5 );
  114.                 colorMaterial.doubleSided = true;    // true にすると辺のふちが欠ける
  115.                 cubeMaterialsList.addMaterial( colorMaterial, cubeMaterialParams[ i ].name );
  116.             }
  117.             cube = new Cube( cubeMaterialsList, 100100100 );
  118.             scene.addChild( cube );
  119.             
  120.             /**
  121.              * 問題点に関するテキストフィールド
  122.              */
  123.             textField = new TextField();
  124.             textField.autoSize = TextFieldAutoSize.LEFT;
  125.             addChild( textField );
  126.             
  127.             
  128.             var timer:Timer = new Timer( 3000 );
  129.             var timerHandler:Function = function( event:TimerEvent ):void { changeZ(); };
  130.             timer.addEventListener( TimerEvent.TIMER, timerHandler );
  131.             timer.start();
  132.             
  133.             stage.addEventListener( MouseEvent.CLICK, function( event:MouseEvent ):void {
  134.                     if ( timer ) {
  135.                         timer.removeEventListener( TimerEvent.TIMER, timerHandler );
  136.                         timer = null;
  137.                     }
  138.                     changeZ();
  139.                 } );
  140.             
  141.             /**
  142.              * 
  143.              */
  144.             addEventListener(Event.ENTER_FRAME, enterFrameHandler );
  145.         }
  146.         
  147.         /**
  148.          * 
  149.          * @param    event
  150.          */
  151.         private function changeZ():void {
  152.             
  153.             if ( cameras[ 0 ].z != 1 )
  154.                 cameras[ 0 ].z ++;
  155.             
  156.             else
  157.                 cameras[ 0 ].z = -1;
  158.         }
  159.         
  160.         /**
  161.          * 
  162.          * @param    event
  163.          */
  164.         private function enterFrameHandler( event:Event ):void {
  165.             
  166.             cube.rotationY++;
  167.             
  168.             for ( var i:uint = 0; i < 4; i++ ) {
  169.                 
  170.                 renderer.renderScene( scene, cameras[ i ], viewports[ i ] );
  171.             }
  172.             
  173.             textField.text = "クリックで cameras[ 0 ].z の値を変更。" + 
  174.                     "\ncameras[ 0 ].z = " + cameras[ 0 ].z + 
  175.                     "\ncameras[ 0 ].rotationX = " + cameras[ 0 ].rotationX + 
  176.                     "\ncameras[ 0 ].rotationY = " + cameras[ 0 ].rotationY + 
  177.                     "\ncameras[ 0 ].rotationZ = " + cameras[ 0 ].rotationZ;
  178.         }
  179.     }
  180. }
noswf
Get Adobe Flash Player