OpenGL 画一个五角星外线框 的原理 和函数代码
时间: 2024-03-30 09:37:08 浏览: 100
OpenGL 画五角星需要用到三角形扇和旋转变换,具体原理如下:
1. 定义五角星的顶点坐标,可以先在一个正十边形上选取五个顶点,然后通过旋转变换得到五角星的顶点坐标。
2. 使用三角形扇来绘制五角星的外框,即以其中一个顶点为中心,将其余四个顶点和中心点组成一个三角形,循环绘制直到连接所有的顶点。
3. 通过旋转变换来得到五角星的不同角度,可以使用 glRotatef 函数来进行旋转变换。
下面是绘制五角星的代码示例:
```
void drawStar() {
// 定义五角星的顶点坐标
GLfloat vertices[10][2] = {
{0.0, 0.5}, {0.15, 0.15}, {0.5, 0.18}, {0.25, -0.05}, {0.38, -0.4},
{0.0, -0.2}, {-0.38, -0.4}, {-0.25, -0.05}, {-0.5, 0.18}, {-0.15, 0.15}
};
glLineWidth(2.0); // 设置线条宽度
// 旋转变换,绘制五角星的不同角度
for (int i = 0; i < 5; i++) {
glRotatef(72.0, 0.0, 0.0, 1.0); // 旋转 72 度
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0, 1.0, 0.0); // 设置颜色
glVertex2fv(vertices[0]); // 设置中心点
for (int j = 0; j <= 4; j++) {
glColor3f(0.0, 0.0, 1.0); // 设置颜色
glVertex2fv(vertices[j*2+1]);
}
glColor3f(0.0, 0.0, 1.0); // 设置颜色
glVertex2fv(vertices[1]);
glEnd();
}
}
```
在 OpenGL 的绘制过程中,我们需要先使用 gluOrtho2D 函数来设置二维投影矩阵,然后在 display 函数中调用 drawStar 函数来绘制五角星的外框。下面是完整的代码示例:
```
#include <GL/glut.h>
void init() {
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
drawStar(); // 绘制五角星的外框
glFlush();
}
void drawStar() {
// 定义五角星的顶点坐标
GLfloat vertices[10][2] = {
{0.0, 0.5}, {0.15, 0.15}, {0.5, 0.18}, {0.25, -0.05}, {0.38, -0.4},
{0.0, -0.2}, {-0.38, -0.4}, {-0.25, -0.05}, {-0.5, 0.18}, {-0.15, 0.15}
};
glLineWidth(2.0); // 设置线条宽度
// 旋转变换,绘制五角星的不同角度
for (int i = 0; i < 5; i++) {
glRotatef(72.0, 0.0, 0.0, 1.0); // 旋转 72 度
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0, 1.0, 0.0); // 设置颜色
glVertex2fv(vertices[0]); // 设置中心点
for (int j = 0; j <= 4; j++) {
glColor3f(0.0, 0.0, 1.0); // 设置颜色
glVertex2fv(vertices[j*2+1]);
}
glColor3f(0.0, 0.0, 1.0); // 设置颜色
glVertex2fv(vertices[1]);
glEnd();
}
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL 画五角星");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
```
阅读全文
相关推荐






