OpenGL画正六边形代码
时间: 2024-09-19 17:00:46 浏览: 55
在OpenGL中绘制正六边形,可以使用顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)来实现。下面是一个简单的示例代码,假设你已经设置好OpenGL环境并且创建了Shader程序、VAO和VBO:
```cpp
#include <GL/glut.h>
#include <GL/glUniforms.h>
// 顶点数据 (3D坐标 + 颜色)
const GLfloat hexagonVertices[] = {
// 正六边形的六个顶点
-0.5f, -0.866f, 0.0f, 1.0f, 0.0f, 0.0f, // A(1,0)
0.5f, -0.866f, 0.0f, 0.0f, 1.0f, 0.0f, // B(0,1)
0.5f, 0.866f, 0.0f, 0.0f, 0.0f, 1.0f, // C(-1,0)
-0.5f, 0.866f, 0.0f, 1.0f, 1.0f, 1.0f, // D(0,-1)
-0.5f, -0.866f, 0.0f, 0.5f, 0.0f, 0.0f, // E(-1,0)
0.5f, -0.866f, 0.0f, -0.5f, 0.0f, 0.0f, // F(1,0)
};
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindVertexArray(VAO); // 绑定VAO
glUseProgram(program); // 使用Shader程序
glUniformMatrix4fv(modelMatLocation, 1, GL_FALSE, &modelMat[0][0]); // 设置模型矩阵
glDrawArrays(GL_TRIANGLES, 0, 6); // 插值顶点数组,绘制六边形
glutSwapBuffers();
}
// ...其他初始化和清理代码...
int main(int argc, char** argv) {
// 初始化GLUT并设置窗口大小
// 创建VAO/VBO加载顶点数据
// 编译Shader程序
// ...
glEnableVertexAttribArray(0); // 启用顶点属性
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(hexagonVertices), hexagonVertices);
while (glutMainLoop()) {}
return 0;
}
```
这个例子展示了如何使用顶点数组对象(VAO)、顶点缓冲对象(VBO)以及GL_TRIANGLES模式来渲染一个基础的正六边形。记得在实际项目中,你需要根据需要调整颜色、纹理和其他属性。
阅读全文