私は最近、thisウェブサイトから3DグラフィックスのOpenGLを学び始めました。私はこのライブラリのための長いチュートリアルがあることを理解しています。ほとんどのチュートリアルでは、glBegin()
とglEnd()
というコマンドを使って図形を描きます。これは非常に簡単で、私の意見に従うのは簡単です。OpenGLの頂点配列バッファ描画の各機能は何をしますか?
しかし、これはおそらく時代遅れだと私は理解しており、私は代わりにglDrawArrays
を使用しなければなりません。問題はこれです、私はちょうどこのメソッドを使用して描画するために必要なコード/概念を理解していません。コードは次のようになります。
void draw() {
//i get this bit
static const GLfloat g_vertex_buffer_data[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
//I stop getting it here
GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);
GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,(void*)0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
}
誰かがこのコードを1行ずつ説明し、バッファの背後にある概念を説明することができますか。また、私は不思議です、古い描画コマンドはまだ新しいバージョンで動作しますか?もしそうなら、それを使用するのは悪い習慣ですか?
可能な限り単純な言葉ですべてを説明してください、私はこの科目の完全な初心者です。 TBH、私はバッファが何であるか知りません。
'glVertexAttribPointer'の動作を説明するなら、関数呼び出し時に' GL_ARRAY_BUFFER'にバインドされたバッファオブジェクトを格納することを説明してください。 –
実際にGreffin、その答えは本当に素晴らしかった、私はそれから多くの新しいことを学んだと私の理解は確かに増加している。他の誰かが答えを加えたいかどうかをしばらく待つつもりですが、 'glVertexAttribPointer(0,3、GL_FLOAT、GL_FALSE、0、(void *)0);'で少し霧が出ます。ありがとう、+1と私はおそらく後でそれを受け入れるでしょう。 –
@AshwinGuptaどの部分がまだあなたのために霧がかかっていますか?それを使用する方法、または関数が呼び出されたときにgpuがどのように動作するのでしょうか?私はそれをどのように(ストライド、ptr)を使用するためのポストを更新しました。しかし、私はその部分で十分に経験していないので、それが呼び出されたときにどのようにGPUが動作するのか説明できません。 – Greffin28