在OpenGL ES2.0中怎么绘制基本图形
时间: 2024-05-16 14:18:38 浏览: 236
在 OpenGL ES 2.0 中,绘制基本图形需要创建一个顶点数组并将其传递给着色器进行渲染。以下是绘制基本图形的一些示例代码:
1. 绘制三角形
```c++
GLfloat vertices[] = {
-0.5f, -0.5f, 0.0f, // 左下角
0.5f, -0.5f, 0.0f, // 右下角
0.0f, 0.5f, 0.0f // 顶部
};
glVertexAttribPointer(positionAttribLocation, 3, GL_FLOAT, GL_FALSE, 0, vertices);
glEnableVertexAttribArray(positionAttribLocation);
glDrawArrays(GL_TRIANGLES, 0, 3);
```
2. 绘制矩形
```c++
GLfloat vertices[] = {
-0.5f, -0.5f, 0.0f, // 左下角
0.5f, -0.5f, 0.0f, // 右下角
0.5f, 0.5f, 0.0f, // 右上角
-0.5f, 0.5f, 0.0f // 左上角
};
glVertexAttribPointer(positionAttribLocation, 3, GL_FLOAT, GL_FALSE, 0, vertices);
glEnableVertexAttribArray(positionAttribLocation);
GLuint indices[] = { 0, 1, 2, 0, 2, 3 };
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indices);
```
3. 绘制圆形
```c++
const int segments = 30; // 圆形的分段数
GLfloat vertices[(segments + 1) * 3];
for (int i = 0; i <= segments; i++) {
float angle = 2.0f * M_PI * static_cast<float>(i) / static_cast<float>(segments);
vertices[i * 3] = cosf(angle);
vertices[i * 3 + 1] = sinf(angle);
vertices[i * 3 + 2] = 0.0f;
}
glVertexAttribPointer(positionAttribLocation, 3, GL_FLOAT, GL_FALSE, 0, vertices);
glEnableVertexAttribArray(positionAttribLocation);
glDrawArrays(GL_TRIANGLE_FAN, 0, segments + 1);
```
以上代码中,`positionAttribLocation` 是顶点着色器中位置变量的位置。`glVertexAttribPointer` 函数将顶点数据传递给着色器。`glEnableVertexAttribArray` 函数启用顶点属性数组。`glDrawArrays` 函数使用传递的数据绘制图形。
对于矩形,我们使用了索引缓冲对象 (`GLuint indices[]`) 来指定顶点的顺序。`GL_TRIANGLE_FAN` 参数指定绘制圆形时使用的绘制模式。
阅读全文