4

作成した 2 つのメッシュの間に線を引く必要があります。各メッシュは、異なるモデル マトリックスに関連付けられています。これをどうするかを考えていて、次のように考えました。

glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(first_object_model_matrix);
glBegin(GL_LINES);
glVertex3f(0, 0, 0); // object coord
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(first_object_model_matrix);
glVertex3f(0, 0, 0); // ending point of the line
glEnd( );

glMatrixModeしかし問題は、とglLoadMatrixfの間glBeginで and を呼び出せないことglEndです。シェーダーとプログラマブル パイプラインも使用しているため、レンダリングされたシーンで固定パイプラインに戻るという考えは刺激的ではありません。

あなたはできる:

  • シェーダーを使用して 2 つのメッシュ (モデル マトリックスがある) の間に線を引く方法を正確に教えてください。

また

  • 上記のようなコードを記述して、2 つのメッシュ モデル マトリックスを持つ線を描画する方法を教えてください。
4

2 に答える 2

4

モデル行列の 1 つで各ポイントを乗算して、ラインの 2 つのポイントを計算します。以下は疑似コードです。Qt を使用しているので、組み込みの数学ライブラリを使用してこの効果を達成できます。

vec3 line_point_1 = model_matrix_object1 * vec4(0, 0, 0, 1);
vec3 line_point_2 = model_matrix_object2 * vec4(0, 0, 0, 1);
// Draw Lines
于 2012-07-21T15:56:17.977 に答える
1

2 番目のポイントの位置は、model_matrix_object2 の w ベクトルから簡単に取得できます。(0,0,0,1) を掛ける必要はありません。

これは、通常、OpenGL の 4x4 マトリックスは、3x3 の回転部分と並進ベクトルで構成されるオルソ マトリックスであるためです。最後の行は 0,0,0,1 で埋められます。4x4 マトリックスが変換される場所を知りたい場合は、一番右の列のベクトルを取得するだけです。

4x4 同種行列が与えられた場合、3D ワールド座標を取得するにはどうすればよいですか?を参照してください。詳細については。

于 2012-07-21T19:01:48.530 に答える