猿问

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

我需要一些帮助来了解为什么这段代码会产生一个空白的绿色窗口。我通过结合来自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 的人。


慕神8447489
浏览 194回答 2
2回答

ABOUTYOU

我终于弄清楚我的问题是在这段代码中。我要做的第一件事是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)这样做似乎可以解决问题。

慕容森

我会将此作为评论发布,但我还没有足够的声誉。已经提供的解决方案几乎解决了我的类似问题,但还没有完全解决。提供的解决方案在哪里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
随时随地看视频慕课网APP

相关分类

Go
我要回答