帮我注释以下代码#include <GL/glut.h> #include <math.h> GLfloat theta = 0; void init() { glClearColor(1.0, 0.0, 0.0, 0.0); glShadeModel(GL_SMOOTH); glMatrixMode(GL_PROJECTION); gluOrtho2D(-2.0, 2.0, -2.0, 2.0); glMatrixMode(GL_MODELVIEW); } void mydraw() { glBegin(GL_TRIANGLES); glColor3f(1.0, 0.0, 0.0); glVertex3f(0.0, 1.0, 0.0); glColor3f(0.0, 1.0, 0.0); glVertex3f(0.0, 0.0, 0.0); glColor3f(0.0, 0.0, 1.0); glVertex3f(0.5, 0.5, 0.0); glEnd(); } void Mydisplay(void) { glClear(GL_COLOR_BUFFER_BIT); void glPushMatrix(void); mydraw(); void glPopMatrix(void); void glPushMatrix(void); glRotatef(theta, 0.0, 0.0, 1.0); mydraw(); void glPopMatrix(void); void glPushMatrix(void); glRotatef(theta, 0.0, 0.0, 1.0); mydraw(); void glPopMatrix(void); void glPushMatrix(void); glRotatef(theta, 0.0, 0.0, 1.0); mydraw(); void glPopMatrix(void); glFlush(); } void MyIdle(void) { theta += 15; if (theta >= 360) theta = 0; glutPostRedisplay(); } void reshape(int width, int height) { glViewport(0, 0, (GLsizei)width, (GLsizei)height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, (GLfloat)width / (GLfloat)height, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -3.0); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow("动画"); init(); glutDisplayFunc(Mydisplay); glutReshapeFunc(reshape); glutIdleFunc(&MyIdle); glutMainLoop(); return 0; }
时间: 2023-06-13 22:09:18 浏览: 229
注释如下:
```c
#include <GL/glut.h> // 引入 OpenGL 库
#include <math.h>
GLfloat theta = 0; // 初始化旋转角度为 0
void init() {
// 设置背景颜色为红色
glClearColor(1.0, 0.0, 0.0, 0.0);
// 设置阴影模式为平滑
glShadeModel(GL_SMOOTH);
// 设置投影矩阵为 2D 正交投影
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-2.0, 2.0, -2.0, 2.0);
// 设置模型视图矩阵
glMatrixMode(GL_MODELVIEW);
}
void mydraw() {
// 绘制一个三角形
glBegin(GL_TRIANGLES);
glColor3f(1.0, 0.0, 0.0); // 设置顶点颜色为红色
glVertex3f(0.0, 1.0, 0.0); // 设置第一个顶点
glColor3f(0.0, 1.0, 0.0); // 设置顶点颜色为绿色
glVertex3f(0.0, 0.0, 0.0); // 设置第二个顶点
glColor3f(0.0, 0.0, 1.0); // 设置顶点颜色为蓝色
glVertex3f(0.5, 0.5, 0.0); // 设置第三个顶点
glEnd(); // 结束绘制
}
void Mydisplay(void) {
glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区
glPushMatrix(); // 压入当前矩阵
mydraw(); // 绘制一个三角形
glPopMatrix(); // 弹出当前矩阵,恢复之前的矩阵
glPushMatrix(); // 压入当前矩阵
glRotatef(theta, 0.0, 0.0, 1.0); // 绕 z 轴旋转 theta 度
mydraw(); // 绘制一个三角形
glPopMatrix(); // 弹出当前矩阵,恢复之前的矩阵
glPushMatrix(); // 压入当前矩阵
glRotatef(theta, 0.0, 0.0, 1.0); // 绕 z 轴旋转 theta 度
mydraw(); // 绘制一个三角形
glPopMatrix(); // 弹出当前矩阵,恢复之前的矩阵
glPushMatrix(); // 压入当前矩阵
glRotatef(theta, 0.0, 0.0, 1.0); // 绕 z 轴旋转 theta 度
mydraw(); // 绘制一个三角形
glPopMatrix(); // 弹出当前矩阵,恢复之前的矩阵
glFlush(); // 刷新缓冲区
}
void MyIdle(void) {
theta += 15; // 每次增加 15 度
if (theta >= 360) theta = 0; // 如果旋转角度大于等于 360 度,就重置为 0 度
glutPostRedisplay(); // 标记窗口需要重新绘制
}
void reshape(int width, int height) {
glViewport(0, 0, (GLsizei)width, (GLsizei)height); // 设置视口大小
glMatrixMode(GL_PROJECTION); // 设置投影矩阵
glLoadIdentity(); // 重置当前矩阵为单位矩阵
gluPerspective(60.0, (GLfloat)width / (GLfloat)height, 1.0, 100.0); // 设置透视投影矩阵
glMatrixMode(GL_MODELVIEW); // 设置模型视图矩阵
glLoadIdentity(); // 重置当前矩阵为单位矩阵
glTranslatef(0.0, 0.0, -3.0); // 将模型沿 z 轴方向平移 -3 个单位
}
int main(int argc, char** argv) {
glutInit(&argc, argv); // 初始化 GLUT 库
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设置窗口的显示模式
glutInitWindowSize(500, 500); // 设置窗口大小
glutInitWindowPosition(100, 100); // 设置窗口位置
glutCreateWindow("动画"); // 创建窗口
init(); // 初始化 OpenGL 状态
glutDisplayFunc(Mydisplay); // 设置窗口绘制回调函数
glutReshapeFunc(reshape); // 设置窗口大小变化回调函数
glutIdleFunc(&MyIdle); // 设置闲置回调函数
glutMainLoop(); // 进入主循环
return 0;
}
```
阅读全文