前回の続きです。
初心者用フライスルーカメラの基礎の基礎(超入門編)ってことで。
前回同様、知ってるよー、興味無いって方はスルーして下さいね。
又、墓穴を掘ってるかもしれません、ご指摘ご指南あらばお願いします。
■今回はキー操作で「何か」をする下準備からです。
今回は既にやってきた内容は細かく書きませんので・・・。何じゃい 2 3を随時参照下さい。
まずは全文をスクリプトエディタ
[?]でレイアウトに書きます。
Var pvVecCamera //カメラ位置確保と設定用 Vector用変数
Var pvVecAt //目標点確保と設定用Vector用変数
Var pvAtPosX //目標点X編集用 Vectorでは使わない
Var pvAtPosZ //目標点Z編集用 Vectorでは使わない
Var pvAtPosY //目標点Y編集用 Vectorでは使わない
Var pvWork //一時的に利用する Vector変数(ワーク)
Var eidChgPosKey //キー操作イベント管理aiイベントID)
//カメラ位置変更キー設定(今回は小文字の a にしてみます)
SetEventKey this, fncChgPos, eidChgPosKey, a
//カメラ位置変更
BeginFunc fncChgPos
//※ここに後述するスクリプトを埋め込みます。(お願いを書く場所)
//フライカメラ位置をセット
SetFlyCameraPos pvVecCamera, pvVecAt
EndFunc
■初心者向けと言う事で、新たに出没した2つを簡単に紹介します。
1.SetEventKey this, fncChgPos, eidChgPosKey, a
直訳すれば:
aキーを押されたら、このスクリプトに書いてある fncChgPos ってお願いを聞いて下さい(VRM様)お願いを聞いてくれるのであれば受付番号は eidChgPosKey に書いて下さい。って感じでしょうか。
後でVRM様から請求書が届くかもしれません。・・・って間に受けないでね。
記述通りに訳せば:
キー入力を受付てね このスクリプトの, fncChgPosってお願い聞いてくれー, 受付番号はeidChgPosKey へ, あっ a ってキー押しますから〜!
って感じです。
2.BeginFunc fncChgPos 〜 EndFunc
fncChgPos ってお願いの名前で、VRM様にお願いした「何か」を纏めて書く場所です。
もちろん、VRM様にお願いした「何か」は、幾つも作る事ができますよ。
今回はaキーを押されたらお願いね、って1つだけですが。
■今回は列車編成に対して平行に移動してみます。(編成に対して右側に移動)
1.今回は前回の様にカメラの位置を事前に指定しません。前々回
[?]の画像の様になると思います。
2.その為にはまず、今のカメラ位置を知る必要があります。それは
GetFlyCameraPos pvVecCamera(カメラ位置), pvVecAt(目的点)
で知る事が出来ます。
前々回
[?]の例だと pvVecCamera (244,80,320) pvVecAt (244,60,100)が取得されます。
3.平行移動する為には、カメラ位置、目的点ともにX軸(右方向)を加算して行くことで実現出来ます。
SetVectorRight pvWork <- (1,0,0)をpvWorkという一時Vectorに格納
VectorAdd pvVecCamera,pvWork <- カメラ位置(244,80,320)に(1,0,0)を加算
pvVecCameraは(245,80,320)になる。
VectorAdd pvVecAt,pvWork <- 目標点(244,60,100)に(1,0,0)を加算
pvVecCameraは(245,60,100)になる。
全文
//フライカメラ位置取得
GetFlyCameraPos pvVecCamera, pvVecAt
//右へ横移動
SetVectorRight pvWork
VectorAdd pvVecCamera,pvWork
VectorAdd pvVecAt,pvWork
察しのいい初心者の方は既にお気づきと思いますが、上記SetVectorRight を変えると
SetVectorLeft <- 左へ移動
SetVectorUp <- 上に移動
SetVectorDown <- 下に移動
SetVectorBackward <- 手前へ移動
SetVectorForward <- 前に移動
となります。
■ここでちょっとコラム。
VectorAdd pvVecCamera,1 としたらどーなるか。
pvVecCamera が(244,80,320)とすると(245,81,321)となります。全ての方向に対して1加算されます。
1mmづつの移動じゃカッタルイってかたへ
SetVectorRight pvWork は
SetVectorX pvWork,1
SetVectorY pvWork,0
SetVectorZ pvWork,0
と同じです。
SetVectorX pvWork,10
SetVectorY pvWork,0
SetVectorZ pvWork,0
こーすれば10mm単位で移動させる事が出来ます。
VectorSub
VectorMul
VectorDiv
まずはお試し下さい。これ以上書くと誰も読んでくれませんから〜!
カメラワークを自分でコントロールしようと思う前に、いろいろ遊んでみて下さい。
面白い発見があるかもしれません。
今回はあえて画像は貼りません。是非初心者の方々に実際スクリプトを触ってみて欲しいな〜と、初心者からのお願いでした。
バキ
■ほんの一例
//カメラ位置を範囲内でランダムにセットして遊ぶ一例
Var vWkRad
Var vWkX
Var vWkZ
Var vWkY
Var vWk
//フライカメラ位置取得
GetFlyCameraPos pvVecCamera, pvVecAt
//ランダム位置取
irnd vWkX
and vWkX,1200
SetVectorX pvVecCamera,vWkX
irnd vWkX
and vWkX,1000
SetVectorX pvVecAt,vWkX
irnd vWkY
and vWkY,400
SetVectorY pvVecCamera,vWkY
//irnd vWk
// and vWk,200 //目標点との工程差範囲
// sub vWkY, vWk
SetVectorY pvVecAt,0
irnd vWkZ
and vWkZ,800
SetVectorZ pvVecCamera,vWkZ
irnd vWkZ
and vWkZ,600
SetVectorZ pvVecAt,vWkZ
ぅーん。どこのサイトか忘れてしまったのでリンクできませんが、
記事通り乱数の生成がワンパターンで飽きてしまいます。
昔昔のBasicにRandomaize って乱数系列を生成するのって無かったっけ?
もちろんVRMにはありません。おーい、たのむよ!ってか。

0