OpenGL 3.2 コア プロファイルを学習するためのガイドを提案できる人はいますか?
SDK は読みにくく、私が見たほとんどのガイドは古い方法しか教えていませんでした。
良いガイドはわかりませんが、簡単な要約を作成できます
シェーダーや頂点バッファーなどの基本については既によく知っていると思います。そうでない場合は、最初にシェーダーに関するガイドを読むことをお勧めします。OpenGL 3 はすべてシェーダーの使用法に基づいているためです。
初期化時:
glGenBuffers
、glBindBuffer(GL_ARRAY_BUFFER, bufferID)
およびを使用して頂点バッファーを作成し、塗りつぶします。glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW)
GL_ELEMENT_ARRAY_BUFFER
代わりに使用することを除いて、インデックス バッファーと同じです。GL_ARRAY_BUFFER
以前のバージョンの OpenGL とまったく同じようにテクスチャを作成します ( glGenTextures
、glBindTexture
、glTexImage2D
)
を使用してシェーダーを作成し、 を使用glCreateShader
して GLSL ソース コードを設定しglShaderSource
、 でコンパイルしglCompileShader
ます。成功したかどうかを確認し、次glGetShaderiv(shader, GL_COMPILE_STATUS, &out)
を使用してエラーメッセージを取得できますglGetShaderInfoLog
を使用してプログラム (つまり、結合されたシェーダーのグループ、通常は 1 つの頂点シェーダーと 1 つのフラグメント シェーダー) を作成しglCreateProgram
、 を使用して必要なシェーダーをバインドし、glAttachShader
次にを使用してプログラムをリンクglLinkProgram
します。リンクの成功を確認できるシェーダーと同じようにglGetProgram
、glGetProgramInfoLog
描きたいとき:
glBindBuffer
と引数GL_ARRAY_BUFFER
をGL_ELEMENT_ARRAY_BUFFER
それぞれ使用して、頂点バッファーとインデックス バッファーをバインドします。
プログラムをバインドしますglUseProgram
シェーダーの可変変数ごとに、可変の識別子である最初のパラメーターを除いて、構文が従来の、などglVertexAttribPointer
の関数に似ているものを呼び出す必要があります。この識別子は、リンクされたプログラムを呼び出すことで取得できますglVertexPointer
glColorPointer
glGetAttribLocation
シェーダーの均一変数ごとに、glUniform
;を呼び出す必要があります。その最初のパラメーターは、uniform 変数の場所 (一種の識別子でもあります) であり、呼び出すことで取得できますglGetUniformLocation
(警告: "a" という名前の配列がある場合は、"a[0]" を指定して関数を呼び出す必要があります)。 )
バインドするテクスチャごとに、 (i はテクスチャごとに異なります)を呼び出しglActiveTexture
てから、uniform の値を i に設定する必要があります。GL_TEXTUREi
glBindTexture
電話glDrawElements
これはあなたがしなければならない基本的なことです。もちろん、頂点配列オブジェクト、ユニフォーム バッファなどの他のものもありますが、それらは単に最適化を目的としたものです。
カリング、ブレンディング、ビューポートなどの他のドメインは、古いバージョンの OpenGL とほぼ同じままでした。
また、このデモ プログラム(頂点配列オブジェクトを使用)を学習することをお勧めします。最も興味深いファイルは main.cpp です
これが役立つことを願っています