8

OpenGL 3.2 コア プロファイルを学習するためのガイドを提案できる人はいますか?

SDK は読みにくく、私が見たほとんどのガイドは古い方法しか教えていませんでした。

4

1 に答える 1

28

良いガイドはわかりませんが、簡単な要約を作成できます

シェーダーや頂点バッファーなどの基本については既によく知っていると思います。そうでない場合は、最初にシェーダーに関するガイドを読むことをお勧めします。OpenGL 3 はすべてシェーダーの使用法に基づいているためです。

初期化時:

  • glGenBuffersglBindBuffer(GL_ARRAY_BUFFER, bufferID)およびを使用して頂点バッファーを作成し、塗りつぶします。glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW)

  • GL_ELEMENT_ARRAY_BUFFER代わりに使用することを除いて、インデックス バッファーと同じです。GL_ARRAY_BUFFER

  • 以前のバージョンの OpenGL とまったく同じようにテクスチャを作成します ( glGenTexturesglBindTextureglTexImage2D)

  • を使用してシェーダーを作成し、 を使用glCreateShaderして GLSL ソース コードを設定しglShaderSource、 でコンパイルしglCompileShaderます。成功したかどうかを確認し、次glGetShaderiv(shader, GL_COMPILE_STATUS, &out)を使用してエラーメッセージを取得できますglGetShaderInfoLog

  • を使用してプログラム (つまり、結合されたシェーダーのグループ、通常は 1 つの頂点シェーダーと 1 つのフラグメント シェーダー) を作成しglCreateProgram、 を使用して必要なシェーダーをバインドし、glAttachShader次にを使用してプログラムをリンクglLinkProgramします。リンクの成功を確認できるシェーダーと同じようにglGetProgramglGetProgramInfoLog

描きたいとき:

  • glBindBufferと引数GL_ARRAY_BUFFERGL_ELEMENT_ARRAY_BUFFERそれぞれ使用して、頂点バッファーとインデックス バッファーをバインドします。

  • プログラムをバインドしますglUseProgram

  • シェーダーの可変変数ごとに、可変の識別子である最初のパラメーターを除いて、構文が従来の、などglVertexAttribPointerの関数に似ているものを呼び出す必要があります。この識別子は、リンクされたプログラムを呼び出すことで取得できますglVertexPointerglColorPointerglGetAttribLocation

  • シェーダーの均一変数ごとに、glUniform;を呼び出す必要があります。その最初のパラメーターは、uniform 変数の場所 (一種の識別子でもあります) であり、呼び出すことで取得できますglGetUniformLocation(警告: "a" という名前の配列がある場合は、"a[0]" を指定して関数を呼び出す必要があります)。 )

  • バインドするテクスチャごとに、 (i はテクスチャごとに異なります)を呼び出しglActiveTextureてから、uniform の値を i に設定する必要があります。GL_TEXTUREiglBindTexture

  • 電話glDrawElements

これはあなたがしなければならない基本的なことです。もちろん、頂点配列オブジェクト、ユニフォーム バッファなどの他のものもありますが、それらは単に最適化を目的としたものです。

カリング、ブレンディング、ビューポートなどの他のドメインは、古いバージョンの OpenGL とほぼ同じままでした。

また、このデモ プログラム(頂点配列オブジェクトを使用)を学習することをお勧めします。最も興味深いファイルは main.cpp です

これが役立つことを願っています

于 2010-09-19T20:28:04.837 に答える