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中文网其他相关文章!