首页  >  文章  >  后端开发  >  尽管窗口和背景设置成功,为什么我无法使用 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