OpenGL绘制一个线框茶壶模型, 通过键盘上W、A、S、D键控制茶壶模型向上、向左、向下、向右旋转
时间: 2023-07-04 20:05:53 浏览: 245
OpenGLDraw.rar
下面是一个简单的OpenGL程序,用于绘制一个线框茶壶模型,并通过键盘上W、A、S、D键控制茶壶模型的旋转。这里的茶壶模型使用了OpenGL自带的glutSolidTeapot函数来绘制,绘制出的茶壶模型是实心的,我们可以通过调用glPolygonMode函数来将其变成线框模式。
```c++
#include <GL/glut.h>
// 茶壶模型的旋转角度
float angleX = 0.0f;
float angleY = 0.0f;
void display()
{
// 清除屏幕
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 设置模型视图矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -5.0f);
glRotatef(angleX, 1.0f, 0.0f, 0.0f);
glRotatef(angleY, 0.0f, 1.0f, 0.0f);
// 绘制茶壶模型
glColor3f(1.0f, 1.0f, 1.0f);
glutSolidTeapot(1.0f);
// 刷新缓冲区
glutSwapBuffers();
}
void reshape(int w, int h)
{
// 设置视口尺寸
glViewport(0, 0, w, h);
// 设置投影矩阵
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f, (float)w / h, 0.1f, 100.0f);
// 设置模型视图矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 'w':
angleX += 5.0f;
break;
case 's':
angleX -= 5.0f;
break;
case 'a':
angleY += 5.0f;
break;
case 'd':
angleY -= 5.0f;
break;
}
glutPostRedisplay();
}
int main(int argc, char **argv)
{
// 初始化GLUT
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(640, 480);
glutCreateWindow("Teapot");
// 开启深度测试
glEnable(GL_DEPTH_TEST);
// 设置绘制模式为线框模式
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
// 设置回调函数
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
// 进入主循环
glutMainLoop();
return 0;
}
```
在这个程序中,我们使用了glutInit、glutInitDisplayMode、glutInitWindowSize和glutCreateWindow函数来创建一个窗口,并设置窗口的大小和显示模式。我们还开启了深度测试,并通过glPolygonMode函数将绘制模式设置为线框模式。在主循环中,我们处理了键盘事件,并在每次按下键盘时调用glutPostRedisplay函数来触发重绘。在重绘函数display中,我们先清除屏幕,并设置模型视图矩阵。然后绘制茶壶模型,并刷新缓冲区。
现在你可以尝试运行这个程序,并用键盘上的W、A、S、D键来控制茶壶模型的旋转了。
阅读全文