duanjue6575 2014-01-28 17:41
浏览 137
已采纳

为什么这个OpenGL程序不画三角形?

I am trying to learn modern OpenGL and want to draw a triangle like this: http://www.opengl-tutorial.org/wp-content/uploads/2011/04/red_triangle.png

I am following this tutorial: www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/, but all I get is the dark blue background (clear color). What could be wrong with this code?

I am writing this in Go and tried to run it on Ubuntu and OS X. Note: I am using the glfw 3 library instead of glfw 2.7 that is used in the tutorial.

I think the relevant parts are:

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()

}

Link to the full code: https://gist.github.com/mbertschler/8672365

I already tried to debug this with OpenGL Profiler on OSX, but it shows me no errors so far.

  • 写回答

1条回答 默认 最新

  • dongzan9069 2014-01-29 14:29
    关注

    The error was in:

    var f float32 = 0.0
    
    vertexAttrib.AttribPointer(
        3,     // size
        gl.FLOAT, // type
        false, // normalized
        0,     // stride
        &f) // array buffer offset
    

    Although it seemed to work for the OP of this question: OpenGL Vertex Buffer doesn't draw anything in golang it doesn't with my program. The accepted answer had the right version of this call. It works with nil as array buffer offset.

    Working Code:

    (At least for github.com/go-gl/gl bindings)

    vertexAttrib.AttribPointer(
        3,     // size
        gl.FLOAT, // type
        false, // normalized
        0,     // stride
        nil) // array buffer offset
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。