ZBLOG

glDrawArrays(GL_QUADS, 0, 4);

在 OpenGL ES 2.0 中,glDrawArrays 不支持 GL_QUADS,因为 OpenGL ES 2.0 和更高版本不再直接支持四边形(quads)的绘制。相反,你需要使用三角形来构建矩形或四边形。你可以使用 GL_TRIANGLE_STRIPGL_TRIANGLE_FAN 来实现这个目的。

绘制矩形的方式

以下是如何用两个三角形绘制一个矩形的示例:

void drawRect(float x, float y, float width, float height) {
    GLfloat vertices[] = {
        x, y,
        x + width, y,
        x, y + height,
        x + width, y + height
    };

    // 使用两个三角形绘制一个矩形
    GLuint indices[] = {
        0, 1, 2, // 第一个三角形
        1, 3, 2  // 第二个三角形
    };

    GLuint vertexBuffer;
    glGenBuffers(1, &vertexBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    GLuint indexBuffer;
    glGenBuffers(1, &indexBuffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

    glEnableClientState(GL_VERTEX_ARRAY);
    
    // 指定顶点数组
    glVertexPointer(2, GL_FLOAT, 0, (void*)0);

    // 使用索引缓冲区绘制
    glDrawElements(GL_TRIANGLES, 6 /* 数量 */, GL_UNSIGNED_INT /* 索引类型 */, (void*)0);

    glDisableClientState(GL_VERTEX_ARRAY);
    
    // 删除缓冲区对象
    glDeleteBuffers(1,&vertexBuffer);
	glDeleteBuffers(1,&indexBuffer);	
}

注意事项

  • 在上述代码中,我们首先定义了矩形的四个顶点,然后通过索引数组将其转换为两个三角形。
  • 确保在调用任何 OpenGL 函数之前正确设置和初始化上下文,并确保绑定正确的 VAO、VBO 和 EBO(如果适用)。
  • 如果你仍然希望以某种方式简化操作,可以考虑封装一些常见的图元绘制函数,这样就不用每次都写相同的逻辑。

请根据您的具体需求和项目要求调整代码!如果有其他问题或进一步的问题,请告诉我。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=6640

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?