カメラ
カメラのオブジェクトが、来場者に何が見えるか、どう動き回るかを決めます。
操作モード
| モード | 来場者は… |
|---|---|
none | カメラを動かせません。あなたが動かします |
orbit | ドラッグでターゲットのまわりを回り、スクロールでズームします |
fly | キーとマウスで自由に飛びます |
firstPerson | 立っている場所から見回します。ポインターは固定されます |
lock | ポインターは固定されますが、カメラは自分のオブジェクトに追従し続けます |
lockfirstPerson はカメラそのものをポインター操作に渡すため、オブジェクトから切り離されます。
モデルのまわりを歩いて見る用途にはよいのですが、キャラクターには使えません。カメラが体に
追従しなくなるからです。
lock は同じようにポインターを固定しますが、カメラは付いたままで、マウスの動きは script に
渡されます。これが一人称視点のゲームです。
orbit の設定
orbit が既定なのは、製品ビューアーに向いているからです。調整項目もいちばん多くあります。
| 設定 | はたらき |
|---|---|
target | 回る中心となる点 |
enableRotate · enablePan · enableZoom | どの操作を許すか |
minDistance · maxDistance | どこまで近づけて、どこまで離れられるか |
minPolarAngle · maxPolarAngle | 上と下にどこまで回り込めるか |
enableDamping · dampingFactor | 指を離したあと、どれだけ滑り続けるか |
autoRotate · autoRotateSpeed | 待機中のゆっくりした回転 |
極角の制限は、ほとんどの製品ビューアーで入れておく価値があります。床の下まで回り込んで下から シーンを見てしまうのを防げます。あれは、どんなライティングをしても意図したようには見えません。
レンズ
fov は画角(度)です。50 が自然な既定値で、小さくすると望遠寄りで平らに、大きくすると広角で
ドラマチックになります。
near と far は描画される範囲を区切ります。near より近い、あるいは far より遠い
オブジェクトは切り取られます。
深度バッファの精度が足りなくなり、近接した面がちらつき始めます。そうなったら、far を下げる
前に near を上げてください。精度に効くのは near のほうがはるかに大きいからです。
fly の設定
fly モードはキーで移動し、そのキーは設定できます。キーを直接指定する代わりに、プロジェクトの
名前付きキー割り当てを参照することもできます。速度とブーストの倍率(既定では Shift 押下)で
速さが決まります。
追加のビュー
追加のビューは、あるカメラから 2 回目の描画を行い、メインの上に重ねます。ミニマップ、 バックミラー、監視モニターはこうして作ります。
すでにカメラを持つオブジェクトに付け、出力先を選びます。
| 出力先 | 描画先 |
|---|---|
screen | キャンバスの矩形。位置と大きさは画面に対する比率で指定します |
texture | オフスクリーンの画像。マテリアルがそれを表示できます |
面白いのは texture です。カメラの映像をテクスチャに描き、そのテクスチャをシーンの画面
オブジェクトに貼れば、世界の別の場所を映す本物のモニターができあがります。
追加のビューはメインの描画のあとに、指定した順で描かれます。
モニターが 2 つあれば、シーンは 3 回描かれます。効く場所では価値がありますし、そうでない場所では 切る価値があります。
どのカメラがアクティブか
シーンは常に 1 台のカメラを通して描画されます。script から、どれがアクティブかを尋ねたり、 切り替えたりできます。
ctx.camera.entity();
ctx.camera.setActive(securityCam);
ctx.camera.pose();
正となるのは常にカメラの transform です。動かすにはそこへ書き込みます。ただし orbit と
firstPerson では回転は操作系のものなので、書き込んだ回転は上書きされます。位置は尊重されます。
→ ctx の API
また ゲーム操作 がカメラを動かしている場合、そのカメラ 自身の操作モードは無視されます。毎フレーム取り合いになってしまうからです。
次へ: リソース — モデル・画像・音。