首頁  >  文章  >  後端開發  >  為什麼我的 OpenGL 三角形渲染在 Go 中不行,但在 C 中卻可以?

為什麼我的 OpenGL 三角形渲染在 Go 中不行,但在 C 中卻可以?

Barbara Streisand
Barbara Streisand原創
2024-10-26 04:07:02610瀏覽

Why Isn't My OpenGL Triangle Rendering in Go, But It Works in C?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn