メインコンテンツまでスキップ

カメラ

カメラのオブジェクトが、来場者に何が見えるか、どう動き回るかを決めます。

操作モード

モード来場者は…
noneカメラを動かせません。あなたが動かします
orbitドラッグでターゲットのまわりを回り、スクロールでズームします
flyキーとマウスで自由に飛びます
firstPerson立っている場所から見回します。ポインターは固定されます
lockポインターは固定されますが、カメラは自分のオブジェクトに追従し続けます
キャラクターに使うのは lock

firstPerson はカメラそのものをポインター操作に渡すため、オブジェクトから切り離されます。 モデルのまわりを歩いて見る用途にはよいのですが、キャラクターには使えません。カメラが体に 追従しなくなるからです。

lock は同じようにポインターを固定しますが、カメラは付いたままで、マウスの動きは script に 渡されます。これが一人称視点のゲームです。

orbit の設定

orbit が既定なのは、製品ビューアーに向いているからです。調整項目もいちばん多くあります。

設定はたらき
target回る中心となる点
enableRotate · enablePan · enableZoomどの操作を許すか
minDistance · maxDistanceどこまで近づけて、どこまで離れられるか
minPolarAngle · maxPolarAngle上と下にどこまで回り込めるか
enableDamping · dampingFactor指を離したあと、どれだけ滑り続けるか
autoRotate · autoRotateSpeed待機中のゆっくりした回転

極角の制限は、ほとんどの製品ビューアーで入れておく価値があります。床の下まで回り込んで下から シーンを見てしまうのを防げます。あれは、どんなライティングをしても意図したようには見えません。

レンズ

fov は画角(度)です。50 が自然な既定値で、小さくすると望遠寄りで平らに、大きくすると広角で ドラマチックになります。

nearfar は描画される範囲を区切ります。near より近い、あるいは far より遠い オブジェクトは切り取られます。

far/near の比が大きすぎると z ファイティングが起きます

深度バッファの精度が足りなくなり、近接した面がちらつき始めます。そうなったら、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 です。動かすにはそこへ書き込みます。ただし orbitfirstPerson では回転は操作系のものなので、書き込んだ回転は上書きされます。位置は尊重されます。 → ctx の API

また ゲーム操作 がカメラを動かしている場合、そのカメラ 自身の操作モードは無視されます。毎フレーム取り合いになってしまうからです。


次へ: リソース — モデル・画像・音。