我正在尝试学习现代OpenGL,并希望绘制一个这样的三角形:
我正在学习本教程:www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/,但我得到的只是深蓝色背景(清晰的颜色)。这段代码可能有什么问题?
我在Go中写这个并尝试在Ubuntu和OS X上运行它。 注意:我使用的是glfw 3库而不是本教程中使用的glfw 2.7。
我认为相关部分是:
func setup() {
gl.ClearColor(0.0, 0.0, 0.4, 0.0)
makeProgram(vertexShaderSource,fragmentShaderSource)
vertexBufferData := []float32{
-1,-1,0,
1,-1,0,
0, 1,0,
}
vertexBuffer = gl.GenBuffer()
vertexBuffer.Bind(gl.ARRAY_BUFFER)
gl.BufferData(gl.ARRAY_BUFFER, len(vertexBufferData)*4, vertexBufferData, gl.STATIC_DRAW)
}
func draw() {
gl.Clear(gl.COLOR_BUFFER_BIT)
program.Use()
// first attribute buffer: vertices
var vertexAttrib = program.GetAttribLocation("vertexPosition_modelspace")
vertexAttrib.EnableArray()
vertexBuffer.Bind(gl.ARRAY_BUFFER)
var f float32 = 0.0
vertexAttrib.AttribPointer(
3, // size
gl.FLOAT, // type
false, // normalized
0, // stride
&f) // array buffer offset
// draw the triangle
gl.DrawArrays(gl.TRIANGLES, 0, 3)
vertexAttrib.DisableArray()
}
链接到完整代码:https://gist.github.com/mbertschler/8672365
我已经尝试在OSX上使用OpenGL Profiler进行调试,但是到目前为止它没有显示任何错误。
答案 0 :(得分:0)
错误发生在:
var f float32 = 0.0
vertexAttrib.AttribPointer(
3, // size
gl.FLOAT, // type
false, // normalized
0, // stride
&f) // array buffer offset
虽然它似乎适用于这个问题的OP:
OpenGL Vertex Buffer doesn't draw anything in golang它不符合我的计划。接受的答案是这个电话的正确版本。它与nil
一起用作数组缓冲区偏移量。
(至少对于github.com/go-gl/gl
绑定)
vertexAttrib.AttribPointer(
3, // size
gl.FLOAT, // type
false, // normalized
0, // stride
nil) // array buffer offset