首頁  >  文章  >  後端開發  >  儘管視窗和背景設定成功,為什麼我無法使用 go-gl/glfw 和 github.com/banthar/gl 顯示三角形?

儘管視窗和背景設定成功,為什麼我無法使用 go-gl/glfw 和 github.com/banthar/gl 顯示三角形?

DDD
DDD原創
2024-11-01 18:13:02322瀏覽

Why Can't I Display a Triangle Using go-gl/glfw and github.com/banthar/gl Despite Successful Window and Background Setup?

Go 中的頂點緩衝區和顯示三角形

問題:

使用Go github.com/banthar/gl包,http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/ 中的教程代碼成功創建了一個視窗並設定了背景顏色,但無法顯示三角形。等效的 C 代碼確實顯示了三角形。為什麼?

答案:

錯誤可能是由於傳遞給 AttribPointer 函數的參數不正確造成的。已確定以下調整可解決此問題:

  • AttribPointer 參數: 為陣列緩衝區偏移傳遞 nil,而非 (void*)0。這告訴 OpenGL 函式庫使用目前緩衝區綁定作為頂點屬性的起點。
  • BufferData Size: 指定頂點緩衝區的大小(以位元組為單位)而不是元素的數量。例如,如果頂點緩衝區包含 n 個 32 位元浮點值,則將 4 * n 傳遞給 BufferData。

修正的 Go 程式碼:

package main

import (
    "github.com/banthar/gl"
    "github.com/go-gl/glfw/v3.2/glfw"
    "log"
)

func main() {
    // ... ( GLFW window setup, GL initialization code) ...

    // Create vertex buffer
    gVertexBufferData := []float32{-1.0, -1.0, 0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 0.0}
    vertexBuffer := gl.GenBuffer()
    vertexBuffer.Bind(gl.ARRAY_BUFFER)
    gl.BufferData(gl.ARRAY_BUFFER, len(gVertexBufferData)*4, gVertexBufferData, gl.STATIC_DRAW)

    for {
        // ... (Clear screen, enable/disable vertex attrib, draw triangle) ...
        vertexAttrib.AttribPointer(
            3,     // Size
            gl.FLOAT, // Type
            false, // Normalized?
            0,     // Stride
            nil)   // Array buffer offset

        // ... (Continue drawing loop) ...
    }
}

以上是儘管視窗和背景設定成功,為什麼我無法使用 go-gl/glfw 和 github.com/banthar/gl 顯示三角形?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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