使用 OpenGL 2.0(不是 ES)绘制三角形

Posted

技术标签:

【中文标题】使用 OpenGL 2.0(不是 ES)绘制三角形【英文标题】:Drawing triangle with OpenGL 2.0 (not ES) 【发布时间】:2013-09-17 15:18:33 【问题描述】:

我尝试使用 OpenGL 2.0 绘制矩形,但出现黑屏,这是我的代码:

public FloatBuffer buf;
public int program;

@Override public void init()

    program = glCreateProgram();
    int vs = glCreateShader(GL_VERTEX_SHADER);
    int fs = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(vs, ... code of vertex shader ...);
    glShaderSource(fs, ... code of fragment shader ...);
    glCompileShader(vs);
    glCompileShader(fs);
    glAttachShader(program, vs);
    glAttachShader(program, fs);
    glLinkProgram(program);
    glUseProgram(program);
    buf = BufferUtils.createFloatBuffer(6);
    buf.put(-.5F); //LEFT
    buf.put(-.5F);
    buf.put(0);// CENTER
    buf.put(.5F);
    buf.put(.5F);
    buf.put(-.5F).flip();// RIGHT
    glClearColor(0, 0, 0, 1);


@Override public void render()

    glClear(GL_COLOR_BUFFER_BIT);
    int ptr = glGetAttribLocation(program, "pos");
    glEnableVertexAttribArray(ptr);
    glVertexAttribPointer(ptr, 2, false, 0, buf);
    glDrawArrays(GL_TRIANGLES, 0, 3);

顶点着色器代码:

#version 110

attribute vec4 pos;

void main()

    gl_Position = pos;

片段着色器代码:

#version 110

void main()

    gl_FragColor = vec4(1,0,0,1);

我做错了什么?

【问题讨论】:

你的#version 指令在哪里? 已添加,没有任何改变。 你在检查着色器编译和链接日志吗? 是的,没有错误。还检查了 glGetError()。 【参考方案1】:

糟糕,抱歉,我忘记调用 glViewport(0, 0, w, h);

【讨论】:

以上是关于使用 OpenGL 2.0(不是 ES)绘制三角形的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES 2.0 卷绕和背面剪裁

OpenGL es 2.0 三角形上的高斯模糊

Android OpenGL ES 2.0 重用前一帧

打开 GL ES 2.0 为啥我的 VBO 不工作?

如何在Android上使用OpenGL ES 2.0绘制点

使用OpenGL ES 2.0在Android上创建Audio wave