首页  >  文章  >  后端开发  >  为什么我的三角形无法使用 Go 在 OpenGL 中渲染?

为什么我的三角形无法使用 Go 在 OpenGL 中渲染?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-25 17:20:02332浏览

Why is My Triangle Not Rendering in OpenGL with Go?

OpenGL 顶点缓冲区无法在 Go 中渲染

在尝试使用 Go 中演示 OpenGL 平台上基本三角形实现的教程时,用户遇到了以下问题有效渲染三角形的困难。尽管成功打开窗口并建立了蓝色背景,但三角形仍然不可见。

将 Go 代码与教程的工作 C 版本进行比较,很明显,vertexAttrib.AttribPointer 的使用存在差异功能。在 C 版本中,提供 (void*)0 参数作为数组缓冲区偏移量,而在 Go 实现中,nil 或 &gVertexBufferData[0] 都被证明是不成功的。

进一步检查表明调用 glGetError不会产生任何错误,表明根本问题是配置错误而不是运行时错误。

问题解决

问题在于传递给 vertexAttrib.AttribPointer 函数的参数。 Go 实现的正确语法是:

<code class="go">vertexAttrib.AttribPointer(
        3,     // size
        gl.FLOAT, // type
        false, // normalized?
        0,     // stride
        nil) // array buffer offset</code>

此外,传递给 gl.BufferData 函数的大小应以字节为单位指定,而不是元素的数量:

<code class="go">data := []float32{0, 1, 0, -1, -1, 0, 1, -1, 0}
[...]
gl.BufferData(gl.ARRAY_BUFFER, len(data)*4, data, gl.STATIC_DRAW)
[...]</code>

通过合并这些调整,可以在 Go 中使用 OpenGL 成功渲染三角形,从而允许用户继续进一步的开发任务。

以上是为什么我的三角形无法使用 Go 在 OpenGL 中渲染?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn