* * *
おまけの機能といってもたいしたことないんですが・・・
キュウちゃんが
前の記事のコメント欄で提案してくれた
パンやズームするカメラワークは、ワタシにはまだまだ難しくて・・・
実は、ソース付で教えてもらったのですが、次の課題に先送りしちゃいました。
(ごめんね>キュウちゃん)
てことで、今回はシンプルに
固定カメラとか
フォローカメラとかのモードを追加するだけ・・・
ただそれだけのことなんですが、すごく時間がかかってしまいました。
■基本機能
「カメラのモード切替は、ボタンで直接選びたい。」
ということにこだわってみました。
カメラ押して、ダイアログだして選択だと、2回クリックしないといけないから
最初からボタンを出しておきたかったんです。
それとカメラ制御のON/OFFもクリック1回で選択できるようにしたいなと。
そんなこんなで、たくさんボタンタイプになりました。
table.jnktbl {width:480px;border:1px #E3E3E3 solid;border-collapse:collapse;border-spacing:0;} table.jnktbl th {padding:5px;border:#E3E3E3 solid;border-width:0 0 1px 1px;background:#F5F5F5;font-weight:bold;line-height:120%;} table.jnktbl td {padding:5px;border:1px #E3E3E3 solid;border-width:0 0 1px 1px;} table.jnktbl th.center,table.jnktbl td.center{text-align:center;}
4つのカメラモードを切り替えることができます。
LookMe
アバターが動いても定期的に自分が見える位置にカメラ位置を再設定するモードです
カメラ位置を保存すると好きな角度でアバターを見ることができます。
Fix
カメラの位置・向きが固定されているモードです。
Follow
カメラの位置は固定で、アバターを追いかけるようにカメラが向きを変えるモードです。
Back
デフォルトカメラと同じようにアバターを後ろから追いかけるモードです。
カメラ位置を保存すると、カメラの向き、距離を変更できます。
ボタンは以下の機能が割り振られています。
アイコン
CLICK
長押し
カメラ
カメラ制御ON/OFFを切り替えます
(未定義)
カラーボタン
制御モードを切り替えます
現在のカメラ位置を保存します
四角ボタン
カメラ制御ON/OFFを切り替えます
ダイアログを表示します
※おまけで、HUDのテクスチャマップも貼っておきますね。
単純なのでレイアウトにだいぶ余裕があったので、プリムの位置あわせ用(上から3段目)の画像もこの1枚に入れています。
■カメラの位置とフォーカス位置
カメラの制御には、前の記事でもでてきた
llSetCameraParams()、
カメラの情報取得には、
llGetCameraPos()と
llGetCameraRot()を使用します。
この情報取得と、設定のパラメータ。考え方がすごく違いますよね。
取得できる情報は、
カメラ位置と
回転だけ。
でも、設定するデータは、
カメラ位置と
フォーカス位置だったりします。
Backカメラのときは、カメラの自動追尾のためのパラメータを設定しなくっちゃいけなかったり・・・
なかなかややこしいです。
「実際には、LSLでカメラのフォーカスを制御できない」
ってことに気がつくまでかなり時間がかかりました。
ズームだと思っていたカメラワークはドリーなのでした。(参考→
カメラ・ワーク)
そんで、
ctrl-8,
ctrl-9,
ctrl-0で操作してるのがズームなのね。これはスクリプトじゃ動かせないみたい。
まだよくわかってるわけじゃないですが、今の理解を表にするとこんな感じです。
モードカメラロックフォーカスロックカメラ位置カメラの向き備考
Fixするするカメラのロック位置フォーカス位置+オフセットの座標を向くカメラは動かない
Followするしないカメラのロック位置アバター位置+オフセットの座標を向くカメラはロック場所で回転してアバターを追いかける
Backしないしないアバターの後方で指定された距離、角度の位置アバター位置+オフセットの座標を向くカメラはアバターを自動追尾する
※LookMeは基本的にFollowと同じ設定です。Followではカメラが固定されるので、タイマでカメラを正面に移動させるしくみです^^
■フォーカス位置の計算
フォーカス位置は、実際のカメラと違って、カメラをその方向に向けるぐらいの意味しかないのですが、今回はカメラの向きを保存するために、フォーカス位置を計算して使用しています。
今回作っているのは、自分をみるためのカメラなので、フォーカス位置はアバターを中心に考えてみました。
この計算もよくわからなくて、ネットをみたり教科書をみたりで四苦八苦だったのですが、
なんとか、以下のような考え方で計算して
だいだいの場所にフォーカスできるようになりました。
あくまでも近似値でしかないので実際のカメラの向きとは完璧に一致しませんがご参考までに。
(ちょっと自信ないですので違ってたら教えてくださいね)
※フォーカス位置はアバターを通る平面上にあると仮定していますので、アバターをみていないときは、この計算でフォーカスが取得できませんのでご注意ください
■サンプル動画をつくってみました
うちのPCはオンボロなので動画キャプチャがうまくいきません。
でも今回は、
amamanさんのAmaRecCo(アマレココ)というフリーの動画キャプチャを使ってなんとかキャプチャとることができました。
(オリジナルのビデオコーデック!!個人でやれるの?すごいね!)
動画編集できなかったので、Flashで文字とか入れてみました。
雰囲気だけでも伝わるかなー