3

へよ、

私は現在、カメラを動かさずにキャラクターのフルモーションが見えるようにカメラを配置する必要があるプロジェクトに取り組んでいます。キャラクターが開始する位置と、キャラクターが 3 つの方向 (X、Y、Z) に移動する最大距離があります。また、視野 (90 度) もあります。

完全な動きを見るためにカメラを動かす必要がないように、カメラをどこに配置する必要があるかを判断する方程式はありますか?

注: これは OpenGL を使用しています。

明確化: カメラは、動いているキャラクターの上ではなく、「正面」にある必要があります。

また、地面に沿って移動します。

4

4 に答える 4

1

ポイントの境界球を作成する場合は、カメラを境界球の半径 / sin(FOV/2) 以上の距離に保つだけで済みます。

たとえば、半径が Radius の境界球があり、視野 FOV が指定されている場合、カメラは「距離」だけ離れた点にあり、境界球の中心を向いている必要があります。

距離を計算する式は次のとおりです。 Dist = Radius / sin( FOV/2 );

これは、任意の向きのカメラに対して 3D で機能します。

于 2009-04-15T23:30:33.723 に答える
0

たとえば、オブジェクトが平面内を移動する場合、その移動領域に外接するボールの外側にカメラを配置するだけでかまいません (これは、FOV が 90 であり、これは幸運な角度であるという事実に依存します)。

オブジェクトが 3D で動く場合は、はるかに困難です。オブジェクトが移動する領域 (立方体とボールなど) と、それを見たい方向を指定すると役立ちます。

于 2009-04-15T23:15:17.613 に答える
0

始点から終点までの線分を取ります。線分の中点を通り、この線分に直交する平面を作成します。次に、カメラをこの平面のどこかに、平面と交点を見た線との交点から次の距離以上離れた場所に配置します。カメラのアップ ベクトルは平面内にある必要があり、水平視野は 90 度である必要があります。

distance = sqrt(dx^2 + dy^2 + dz^2) / 2

このカメラの位置はすべて、ビュー ポートの左または右の境界線上に始点と終点があり、垂直方向の中央に配置されます。

もう 1 つの解決策は、開始点、終了点、および画面上の両方の点の目的の位置を取る関数を作成することです。次に、カメラ変換の射影方程式を解くだけです。

于 2009-04-15T23:00:46.713 に答える
0

(X、Y、Z) の最大範囲を持つだけでは十分ではありません。表示ポートは基本的にピラミッド型であり、ピラミッドの頂点が目の位置にあるからです。

議論のために、すべての動きが (X, Z) 平面 (つまり地面) にあり、目が Y 軸に沿って 10m 原点の真上にあると仮定しましょう。

正方形のビューポートを想定すると、視野が 90 度で、X 軸と Z 軸の両方に沿って ±10m から見ることができますが、地上 (Y = 0) にあるオブジェクトのみを見ることができます。彼らが地面から離れるとすぐに、視界が狭くなります。地面が 1m の場合、(X, Z) 範囲はわずか ±9m です。

明らかに、実際のカメラはどの方向を向いていても、シーン内に配置できます。カメラの「ロール」角度でさえ、見える範囲が変わる可能性があります。このようなカメラ ポイントは実際には無数にあるため、基準をいくらか制限する必要があります。

于 2009-04-15T23:01:16.667 に答える