グラフィックは初めてです。私はOpenGL/JOGLを試しています。
レンダリングしている.objファイルがあります。世界のどこにでも正確に配置するのに苦労しています。モデルの実行時設定サイズを考慮して、静止させたい平面があります。モデルの寸法を考慮する必要があるため、変換を行うだけでは十分ではありません。
それでも、.objの参照フレームの0をワールド座標系に変換する方法がわかりません。
これに対処するための慣用的なパターンは何ですか?
簡単な翻訳の場合(ステップ単位):
ワールド座標でのオブジェクトの原点の位置を取得し、最初に原点に-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
これでオブジェクトを平面上に置く必要があると思います。私がこの種のことをしたのは久しぶりなので、間違った方向にいくつかの兆候があるかもしれません-数字を再確認して実験する準備をしてください。
モデルの原点をその足元に設定する必要があります。その重心の下。このように、スケーリングしても、(地面に対する)位置は変わりません。
次に、目的の場所に移動し、回転してから、(この順序で)拡大縮小します。これで完了です。