1

I recently learned that:

glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();

is not really how its done. I've been working with the tutorials at opengl-tutorial.org which introduced me to VBOs. Now I'm migrating it all into a class and trying to refine my understanding.
My situation is similar to this. I understand how to use matrices for rotations and I could do it all myself then hand it over to gl and friends. But I'm sure thats far less efficient and it would involve more communication with the graphics card. Tutorial 17 on that website shows how to rotate things, it uses:

// Send our transformation to the currently bound shader, 
// in the "MVP" uniform
glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);
glUniformMatrix4fv(ModelMatrixID, 1, GL_FALSE, &ModelMatrix[0][0]);
glUniformMatrix4fv(ViewMatrixID, 1, GL_FALSE, &ViewMatrix[0][0]);

to rotate objects. I assume this is more efficient then anything I could ever produce. What I want is to do something like this, but only multiply the matrix by some of the mesh, without breaking the mesh into pieces (because that would disrupt the triangle-vertex-index relationship and I'd end up stitching it back together manually).
Is there a separate function for that? Is there some higher level library that handles meshes and bones that I should be using (as some of the replies to the other guys post seems to suggest)? I don't want to get stuck using something outdated and inefficient again, only to end up redoing everything again later.

4

2 に答える 2

1

ユニフォームは均一であるため、そのように名付けられました。レンダー呼び出しの過程で変化しません。シェーダーは、入力値 (入力タイプごとに提供されます。頂点シェーダーの場合は頂点ごと、フラグメント シェーダーの場合はフラグメントごとなど)、uniforms (単一のレンダリング呼び出しに対して固定されています)、およびグローバル変数 (これらはシェーダーのインスタンス化ごとに元の値にリセットされます)。

単一のレンダリング呼び出し内でオブジェクトのさまざまな部分に対してさまざまなことを行いたい場合は、入力変数に基づいてこれを行う必要があります。これは、単一のレンダリング呼び出し内で入力のみが変更されるためです。マトリックス スキニングまたはオブジェクトの階層で何かをしようとしているように聞こえるので、おそらく各頂点にマトリックス インデックスまたは何かを入力として与えたいと思うでしょう。このインデックスを使用して一様行列配列を検索し、使用する実際の行列を取得します。

于 2013-03-28T23:58:34.957 に答える
0
于 2013-03-29T10:59:58.137 に答える