Go で OpenGL 頂点バッファーが三角形をレンダリングしない
チュートリアルの指示に従っているにもかかわらず、Go バージョンが失敗するという問題が発生しましたC の対応物が正常に三角形を表示している間に、三角形を表示します。この不一致は、vertexAttrib.AttribPointer() メソッドに引数を指定する際の潜在的な不一致が原因であると考えられます。
Go コードでは、次の引数がメソッドに渡されます。
<code class="go">vertexAttrib.AttribPointer( 3, // Size 0, // Normalized? 0, // Stride nil, // Array buffer offset )</code>
ただし、C コードでは、同等のメソッドが別の引数セットで呼び出されます:
<code class="c">glVertexAttribPointer( 0, 3, // Size GL_FLOAT, // Type GL_FALSE, // Normalized? 0, // Stride (void*)0 // Array buffer offset )</code>
配列バッファー オフセットに対応する引数は、Go コードに存在しないため目立ちます。この引数は、バッファの先頭から特定の属性の頂点データの先頭までのオフセットをバイト単位で指定します。 Go コードでこの引数を省略すると、頂点データが正しく取得されない可能性があります。
問題を解決するには、banthar バインディングの作業ブランチを使用し、次の引数を vertexAttrib に渡す必要があります。 .AttribPointer() メソッド:
<code class="go">vertexAttrib.AttribPointer( 3, // Size gl.FLOAT, // Type false, // Normalized? 0, // Stride nil // Array buffer offset )</code>
さらに、サーバーに送信されるデータは、データを表すバイト数を表すために 4 を乗算する必要があります。たとえば、データが
<code class="go">data := []float32{0, 1, 0, -1, -1, 0, 1, -1, 0}</code>
として記述されている場合、次のように使用する必要があります:
<code class="go">gl.BufferData(gl.ARRAY_BUFFER, len(data) * 4, data, gl.STATIC_DRAW)</code>
以上がOpenGL Triangle が Go ではレンダリングされないのに、C では動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。