« 伊予鉄2100系新塗装 by Nal8 さん | トップページ | クハ106 »

360度見回す君とそのコード

ネーミングどおりの,ビュワー内を上下左右,ぐるぐる回って全球を見回すようにフライするーカメラを制御するスクリプトを書きました。USO800鉄道総裁によると,動画で撮影してツールに引っ掛けるとエクイレクタングラー形式の画像に加工ができてバーチャルキャスト用の背景にできるそうです。何じゃそりゃ。

で,そうすると何ができるのか,というと,そのUSO800鉄道総裁(のアバター)がVRMビュワー(から生成されたまた別の空間)をのそのそ動くんだそうです。

VRM NXの登場も近づいてきている中,このようなVR・AR系技術との融合も期待が高まります。

ちなみにUSO800鉄道総裁のアバター,雰囲気結構似てます笑

スクリプト全文は以下のようです。レイアウトスクリプトにコピペしてください。

// カメラ座標を管理する変数
Var CamPos
Var CamTheta
Var CamPhi

Var pi
	pi pi
Var pi2
mov pi2 pi
mul pi2 2.0

Var FlgStopOver
Var FlgDown
Var FlgStopAll

// イベントハンドラ
Var EidCamStart
Var EidCamFrame

SetEventKey this MtdCamStart EidCamStart 0


BeginFunc MtdCamStart
	Var vecat
	GetFlyCameraOFFSET CamPos vecat
	setf CamTheta 0.0
	setf CamPhi 0.0	
	call this MtdCamPosCalc
	SetEventAfter this MtdCamRound EidCamFrame 1500
EndFunc

BeginFunc MtdCamStop
	setf CamTheta 0.0
	setf CamPhi 0.0	
	call this MtdCamPosCalc
EndFunc
	
BeginFunc MtdCamRound
	call this MtdCamPosCalc

	add CamTheta 0.02
	
	if> CamTheta pi2
		if FlgStopAll
			SetEventAfter this MtdCamStop EidCamFrame 3000
			return
		endif
		ifzero FlgDown
			SetEventAfter this MtdCamOver EidCamFrame 100
		else
			SetEventAfter this MtdCamDown EidCamFrame 100
		endif
		sub CamTheta pi2
	else
		SetEventAfter this MtdCamRound EidCamFrame 10
	endif
EndFunc

BeginFunc MtdCamOver
	Var tmp

	call this MtdCamPosCalc

	add CamPhi 0.008

	if> CamPhi 1.56
		// 真上まで来ちゃったら一周する例外処理
		set FlgDown 1
		SetEventAfter this MtdCamRound EidCamFrame 100
		return
	endif

	mov tmp CamPhi
	mul tmp 18
	cos tmp tmp
	if> tmp 0.0
		if FlgStopOver
			SetEventAfter this MtdCamRound EidCamFrame 100
			set FlgStopOver 0
			return
		endif
	else
		set FlgStopOver 1
	endif
	SetEventAfter this MtdCamOver EidCamFrame 10
EndFunc

BeginFunc MtdCamPosCalc
	Var vecd
	SetVectorZero vecd
	Var tmp
	
	cos tmp CamTheta
	SetVectorX vecd tmp

	sin tmp CamTheta
	SetVectorZ vecd tmp

	tan tmp CamPhi
	SetVectorY vecd tmp

	DrawVar CamTheta
	DrawVar vecd

	VectorAdd vecd CamPos
	SetFlyCameraPos CamPos vecd
EndFunc

BeginFunc MtdCamDown
	Var tmp
	call this MtdCamPosCalc
	sub CamPhi 0.008

	// 上向きから水平まで降りてくるための例外処理
	if> CamPhi 0.0
		SetEventAfter this MtdCamDown EidCamFrame 10
		return
	endif

	// 真下まで来たときの例外処理
	if< CamPhi -1.56
		set FlgStopAll 1
		SetEventAfter this MtdCamRound EidCamFrame 100
		return
	endif

	mov tmp CamPhi
	mul tmp 18
	cos tmp tmp
	if> tmp 0.0
		if FlgStopOver
			SetEventAfter this MtdCamRound EidCamFrame 100
			set FlgStopOver 0
			return
		endif
	else
		set FlgStopOver 1
	endif
	SetEventAfter this MtdCamDown EidCamFrame 10
EndFunc

フライするーカメラでお好きなところに移動したら,「0」キーを押してください。その場で,360度見回しが始まります。ぜんぶ終わるまでには90秒程かかります。

|

« 伊予鉄2100系新塗装 by Nal8 さん | トップページ | クハ106 »

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 360度見回す君とそのコード:

« 伊予鉄2100系新塗装 by Nal8 さん | トップページ | クハ106 »