我需要一些帮助来了解为什么这段代码会产生一个空白的绿色窗口。我通过结合来自https://github.com/Jragonmiris/mathgl/blob/master/examples/opengl-tutorial/tutorial02/main.go和https://github.com/veandco/go-sdl2/blob 的例子来做到这一点/master/examples/opengl3.go。我想我不确定这是 GoLang sdl/gl 框架的错误还是我的 OpenGL 理解问题。所有这些应该绘制的是一个立方体。所以我仍然无法在屏幕上绘制一个简单的形状。我做了一些改变,比如简化我的形状(三角形)。我创建了坐标,所以它们会更靠近 -z 轴,这样我就能看到它们,但这没有用。然后我设置 MVP 矩阵(将相机向后移动一些)只是为了确保。我的着色器很简单,因为我只传递了一个 vec3 顶点位置和 mat4 MVP 矩阵,所以相信着色器工作正常吗?抱歉所有的混乱,我想我可能在这里遗漏了一些东西。更新:我还运行了 opengl 的版本命令:fmt.Println(gl.GetString(gl.VERSION))fmt.Println(gl.GetString(gl.VENDOR))fmt.Println(gl.GetString(gl.RENDERER))其输出为:4.5.0 NVIDIA 347.09 NVIDIA Corporation GeForce GTX 650 Ti/PCIe/SSE2不知道这有没有影响?更新:我查看了更多示例并决定尝试添加一些 sdl 属性,但仍然没有运气:sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1)sdl.GL_SetAttribute(sdl.GL_RED_SIZE, 8)sdl.GL_SetAttribute(sdl.GL_GREEN_SIZE, 8)sdl.GL_SetAttribute(sdl.GL_BLUE_SIZE, 8)sdl.GL_SetAttribute(sdl.GL_ALPHA_SIZE, 8)更新:我修改了这篇文章,只包含更新的代码,以免吓跑 TLDR 的人。
2 回答
ABOUTYOU
TA贡献1812条经验 获得超5个赞
我终于弄清楚我的问题是在这段代码中。
我要做的第一件事是
positionAttrib := program.GetAttribLocation("vertexPosition_modelspace")
对于进入顶点着色器的所有输入变量。这是在为每个阵列绑定 VBO 之后完成的。
下一个,
如果你注意到我上面的代码:
gl.BufferData(gl.ARRAY_BUFFER, len(triangle_vertices)*4, &triangle_vertices, gl.STATIC_DRAW)
我只是用triangle_vertices数组替换了它,而不是地址:
gl.BufferData(gl.ARRAY_BUFFER, len(triangle_vertices)*4, triangle_vertices, gl.STATIC_DRAW)
这样做似乎可以解决问题。
慕容森
TA贡献1853条经验 获得超18个赞
我会将此作为评论发布,但我还没有足够的声誉。
已经提供的解决方案几乎解决了我的类似问题,但还没有完全解决。
提供的解决方案在哪里
gl.BufferData(gl.ARRAY_BUFFER, len(triangle_vertices)*4, triangle_vertices, gl.STATIC_DRAW)
解决我的问题的实际代码是
gl.BufferData(gl.ARRAY_BUFFER, len(triangle_vertices)*4, gl.Ptr(triangle_vertices), gl.STATIC_DRAW)
我也用这个回答了一个类似的问题,但更详细,可以在这里找到: OpenGL Vertex Buffer does not draw any in golang
- 2 回答
- 0 关注
- 193 浏览
添加回答
举报
0/150
提交
取消