トップ > FIVe3D > FIVe3D viewDistance の不思議

FIVe3D viewDistance の不思議

FIVe3D の Scene3D に「viewDistance」というプロパティがある。いわゆる視点側のZ値の最大値みたいなもの?もしくは、透視投影の処理に関係するもの? viewDistance の初期値はおそらく1000で設定してあると思うのだけども、この値をちょこちょこと触っていたら、不思議な現象が発生した。

で、結果、FIVe3D は視点の後ろ側にある場合も描画してしまうような気がする。バグ?

うーん。なんか説明がトコトン難しい…。

サンプル

見てもらった方が早いということで不思議な現象サンプル。

このサイトをご覧頂くには最新の Flash Player Plug-in をお使いのブラウザにインストールする必要があります。
Flash Player Plug-in はこちらからダウンロードする事が出来ます(無料)。


こんな感じで、オブジェクトが視点の後ろ側にいっている間は見えなくなって欲しいのだが、なんか反転した状態で描画されてしまっている。

ソースはこちら


package {
	//クラス読み込み
	import flash.display.StageScaleMode;
	import flash.display.Sprite;
	import flash.events.Event;
	//FIVe3D v2.1
	import five3D.display.Scene3D;
	import five3D.display.Sprite3D;
	import five3D.utils.Drawing;
	
	public class Main extends Sprite {
		
		private var sc3D:Scene3D;
		private var base3D:Sprite3D;
		private var sp3D:Sprite3D;
		
		//コンストラクタ
		public function Main() {
			
			//ステージサイズ設定
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			//シーン設定
			sc3D = new Scene3D();
			sc3D.x = stage.stageWidth / 2;
			sc3D.y = stage.stageHeight / 2;
			sc3D.viewDistance = 200;	//←200に設定
			addChild(sc3D);
			
			//ベースオブジェクト生成
			base3D = new Sprite3D();
			sc3D.addChild(base3D);
			
			//3Dオブジェクト生成
			sp3D = new Sprite3D();
			with(sp3D) {
				graphics3D.beginFill(0xFF9900);
				graphics3D.drawRect(-10, -10, 20, 20);
				graphics3D.endFill();
				z=250;	//←250に設定
			}
			base3D.addChild(sp3D);
			
			//イベント設定
			base3D.addEventListener(Event.ENTER_FRAME, base3DEnterFrame);
		}
		
		private function base3DEnterFrame(e:Event):void {
			e.target.rotationY += 2;
		}
	}
}


上記ソースには「FIVe3D」が別途必要です。


:
sc3D.viewDistance = 200;	//←200に設定
:
:
with(sp3D) {
	z=250;	//←250に設定
:


viewDistance を 200 で設定して、オブジェクト sp3D の z 値を 250 に配置。そして、親の base3D オブジェクトを回転させる。

sp3D 自体の z 値は変動しないが、その親である base3D が回転することで、位置的には -250 まで移動することになるはず。

z が負の方向に viewDistance の数値を超えると、視点の後ろ側、つまり本来はオブジェクトが見えなくなるはずなのだが、サンプルを見て分かるように、一瞬変な描画になり、反転して回転するアニメーションが描画されてしまう。

バグなのか、僕のスクリプトの記述方法が悪いのか…(汗

FIVe3D の中身を見て、z が viewDistance を超えるような場合は、visible にしてしまおうと試みたが、所詮三流スクリプターなため、解決できずに断念…orz

FIVe3D で、視点の後ろ側にまわるような構成の場合は、ちょっと要注意かも。

PaperVision3DAway3D だと大丈夫なのかな?

この記事をブックマークしておく

コメント:0

コメント投稿

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

この情報を記憶する

トップ > FIVe3D > FIVe3D viewDistance の不思議

記事検索
カテゴリ
RSSフィード

このページの先頭へ戻る