Я пытаюсь изучить современный 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
Я уже пытался отлаживать это с помощью OpenGL Profiler на OSX, но пока ошибок не показывает.
vertexAttrib.AttribPointer()
отличается от учебника, которому вы следуете. В учебнике он передает0
как указательvoid *
. Здесь вы передали адрес переменнойfloat32
(которая не будет равна нулю). Может ли это быть проблема? - person James Henstridge   schedule 29.01.2014&f) // array buffer offset
не имеет никакого смысла. Это должно быть смещение в байтах — приведенное к(void *)
— в текущий связанный GL_ARRAY_BUFFER. Попробуйте заменить&f
на(0)
. - person Brett Hale   schedule 29.01.2014(0)
, компилирует, но выводит:panic: type must be a pointer, a slice, uintptr or nil.
Насколько я понимаю (0) - это просто целочисленный литерал. Что именно означает (void*)0, я не могу найти четкого описания. Это указатель на значение0
? - person mbert   schedule 29.01.2014