在 OpenGL ES 2.0 中,glDrawArrays
不支持 GL_QUADS
,因为 OpenGL ES 2.0 和更高版本不再直接支持四边形(quads)的绘制。相反,你需要使用三角形来构建矩形或四边形。你可以使用 GL_TRIANGLE_STRIP
或 GL_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助手提供,问题来源于学员提问