用c++的OpenGL写一个多彩三棱锥绕轴旋转的代码
时间: 2024-05-21 10:12:01 浏览: 87
好的,以下是用c的OpenGL写一个多彩三棱锥绕轴旋转的代码:
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
// 角度转弧度
#define DEG2RAD(deg) (deg * M_PI / 180)
// 三棱锥的四个顶点
GLfloat vertices[][3] = {
{-1.0f, -1.0f, -1.0f},
{1.0f, -1.0f, -1.0f},
{0.0f, 1.0f, 0.0f},
{0.0f, 0.0f, 1.0f}
};
// 三棱锥的四个面
GLint faces[][3] = {
{0, 1, 2},
{1, 2, 3},
{2, 3, 0},
{3, 0, 1}
};
// 三棱锥的颜色
GLfloat colors[][3] = {
{1.0f, 0.0f, 0.0f},
{0.0f, 1.0f, 0.0f},
{0.0f, 0.0f, 1.0f},
{1.0f, 1.0f, 0.0f}
};
// 绕Y轴旋转的角度
GLfloat angle = 0.0f;
void display() {
// 清除颜色缓冲区和深度缓冲区
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 设置模型矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -6.0f);
glRotatef(angle, 0.0f, 1.0f, 0.0f);
// 绘制三棱锥的四个面
glBegin(GL_TRIANGLES);
for (int i = 0; i < 4; i++) {
glColor3f(colors[i][0], colors[i][1], colors[i][2]);
for (int j = 0; j < 3; j++) {
glVertex3f(vertices[faces[i][j]][0], vertices[faces[i][j]][1], vertices[faces[i][j]][2]);
}
}
glEnd();
// 交换前后缓冲区
glutSwapBuffers();
}
void idle() {
// 角度加1,并重新绘制
angle += 1.0f;
glutPostRedisplay();
}
void init() {
// 设置背景颜色为白色
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
// 启用深度测试
glEnable(GL_DEPTH_TEST);
}
int main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(600, 600);
glutCreateWindow("Colorful Pyramid");
glutDisplayFunc(display);
glutIdleFunc(idle);
init();
glutMainLoop();
return 0;
}
阅读全文