0

グラフィックは初めてです。私はOpenGL/JOGLを試しています。

レンダリングしている.objファイルがあります。世界のどこにでも正確に配置するのに苦労しています。モデルの実行時設定サイズを考慮して、静止させたい平面があります。モデルの寸法を考慮する必要があるため、変換を行うだけでは十分ではありません。

それでも、.objの参照フレームの0をワールド座標系に変換する方法がわかりません。

これに対処するための慣用的なパターンは何ですか?

4

2 に答える 2

1

簡単な翻訳の場合(ステップ単位):

ワールド座標でのオブジェクトの原点の位置を取得し、最初に原点に-1を掛けて、これから変換行列を作成します。

1 0 0 -xo
0 1 0 -yo
0 0 1 -zo
0 0 0  1

これにより、オブジェクトが移動し、その原点がワールドの原点と一致するようになります。したがって、オブジェクトを配置する平面のy値を取得し(yが「上」であると仮定)、それを上記で計算されたベクトルに追加して、行列が次のようになるようにします。

1 0 0 -xo
0 1 0 (-yo + yp)
0 0 1 -zo
0 0 0  1

これは、平面がオブジェクトと交差することを意味します(原点がオブジェクトの内側のどこかにあると仮定します)。次に、オブジェクトのバウンディングボックスを見つけて、オブジェクトの原点から最小のy値を取得します。

+------+ ymax
|      |
|      |
|   o  |
|      |
+------+ ymin

ここで、「o」は原点です。

これをマトリックスに含めます。

1 0 0 -xo
0 1 0 (-yo + yp + (yo - min))
0 0 1 -zo
0 0 0  1

これでオブジェクトを平面上に置く必要があると思います。私がこの種のことをしたのは久しぶりなので、間違った方向にいくつかの兆候があるかもしれません-数字を再確認して実験する準備をしてください。

于 2010-09-20T22:43:23.187 に答える
0

モデルの原点をその足元に設定する必要があります。その重心の下。このように、スケーリングしても、(地面に対する)位置は変わりません。

次に、目的の場所に移動し、回転してから、(この順序で)拡大縮小します。これで完了です。

于 2010-09-25T14:09:39.467 に答える