首页 > 后端开发 > Golang > 为什么我的 OpenGL 三角形渲染在 Go 中不行,但在 C 中却可以?

为什么我的 OpenGL 三角形渲染在 Go 中不行,但在 C 中却可以?

Barbara Streisand
发布: 2024-10-26 04:07:02
原创
685 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板