【问题标题】:glDrawArrays(GL_POINTS, 0 4) does not draw points in iOS 5.0 and openGL ES 2.0glDrawArrays(GL_POINTS, 0 4) 在 iOS 5.0 和 openGL ES 2.0 中不画点
【发布时间】:2012-03-14 08:13:03
【问题描述】:

我有一个简单的 OpenGL ES 2.0 代码来绘制点。这是 VAO 设置:

    static const GLfloat squareVertices[] = {
        -0.5f, -0.5f, -1.0f,
        0.5f, -0.5f, -1.0f,
        0.5f,  0.5f, -1.0f,
        -0.5f, 0.5f,  -1.0f
    };

    static const GLfloat squareColors[] = {
        1.0f, 0.0f, 0.0f, 1.0f,
        0.0f, 1.0f, 0.0f, 1.0f,
        0.0f, 0.0f, 1.0f, 1.0f,
        1.0f, 0.0f, 1.0f, 1.0f
    };
    glGenVertexArraysOES(1, &_vertexArray);
    glBindVertexArrayOES(_vertexArray);

    glGenBuffers(1, &_vertexBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(squareVertices), squareVertices, GL_STATIC_DRAW);

    glEnableVertexAttribArray(ATTRIB_VERTEX);
    glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, GL_FALSE, 0, 0);

    glGenBuffers(1, &_colorP_VBO);
    glBindBuffer(GL_ARRAY_BUFFER, _colorP_VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(squareColors), squareColors, GL_STATIC_DRAW);

    glEnableVertexAttribArray(ATTRIB_COLOR);
    glVertexAttribPointer(ATTRIB_COLOR, 4, GL_FLOAT, GL_FALSE, 0, 0);
    glBindVertexArrayOES(0);

这是渲染代码:

    [glView setDisplayFramebuffer:glView.viewFrameBuffer];

    glUseProgram(simpleShaderProgram);
    glBindVertexArrayOES(_vertexArray);

//  glLineWidth(5.0f);
//      glDrawArrays(GL_LINE_LOOP, 0, 4);
//      glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
//  glEnable(GL_POINT_SMOOTH);

    glPointSize(25.0f);
    glDrawArrays(GL_POINTS, 0, 4);

    glBindVertexArrayOES(0);

    glUseProgram(0);

    glBindFramebuffer(GL_FRAMEBUFFER, 0); //unbind the FBO  
    [glView presentFramebuffer:glView.viewFrameBuffer];

当我使用 GL_LINE_LOOP 或 GL_TRIANGLE_FAN 时,它会在屏幕上绘制彩色方块。但是,当我使用 GL_POINTS 时,渲染器不会绘制顶点并且屏幕是空白的。 如果有人让我知道我错过了什么,我将不胜感激。 谢谢

以下是我的顶点和片段着色器:

attribute vec4 position;
attribute vec4 v_color;

varying vec4 colorVarying;


void main()
{
    colorVarying = v_color;
    gl_Position =  position;

}

------------------------------------------------
precision mediump float;
varying vec4 colorVarying;


void main()
{
    gl_FragColor = colorVarying;
}

【问题讨论】:

  • 您使用的是 ES 2.0,所以 glPointSize 调用可能没有任何作用。点大小应在着色器内设置。也发布你的顶点着色器。
  • 我已经添加了我的顶点着色器代码。我的问题是我看不到屏幕上绘制的任何点。甚至没有 1 个像素。
  • gl_PointSize = 5.0;在顶点着色器中做到了。感谢您的帮助!
  • 是的,就可以了。复制到未来流浪者的答案中。

标签: ios opengl-es-2.0 points


【解决方案1】:

您使用的是 ES 2.0,因此 glPointSize() 调用可能不会执行任何操作。点大小应在着色器中设置,使用内置输出变量gl_PointSize

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    相关资源
    最近更新 更多