OpenGL 頂點緩衝區未在Go 中渲染三角形
儘管按照教程中的說明進行操作,用戶還是遇到了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 三角形渲染在 Go 中不行,但在 C 中卻可以?的詳細內容。更多資訊請關注PHP中文網其他相關文章!