为了账号安全,请及时绑定邮箱和手机立即绑定

Go Lang OpenGL 简单形状 - 空白屏幕

Go Lang OpenGL 简单形状 - 空白屏幕

Go
慕神8447489 2021-09-10 20:47:46
我需要一些帮助来了解为什么这段代码会产生一个空白的绿色窗口。我通过结合来自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)

这样做似乎可以解决问题。


查看完整回答
反对 回复 2021-09-10
?
慕容森

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


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信