OpenGL模型视图变换实验代码
时间: 2023-11-12 22:09:49 浏览: 123
实验五_(源程序2).rar_OPenGl实现_opengl模型_opengl矩阵_physicale1d
以下是一个简单的OpenGL模型视图变换实验代码,可以让你了解如何进行视图变换。这个例子展示了一个立方体,你可以使用鼠标和键盘控制旋转和缩放。
```
#include <GL/glut.h>
int width = 800;
int height = 600;
float angleX = 0.0f;
float angleY = 0.0f;
float zoom = 1.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);
glScalef(zoom, zoom, zoom);
glutWireCube(1.0f);
glutSwapBuffers();
}
void resize(int w, int h)
{
width = w;
height = h;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f, (float)w / (float)h, 0.1f, 100.0f);
}
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;
case '+':
zoom += 0.1f;
break;
case '-':
zoom -= 0.1f;
break;
}
glutPostRedisplay();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(width, height);
glutCreateWindow("Model View Transformation");
glutDisplayFunc(display);
glutReshapeFunc(resize);
glutKeyboardFunc(keyboard);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return 0;
}
```
在这个例子中,我们首先创建了一个窗口,并启用了深度测试。在显示函数中,我们将当前矩阵设置为模型视图矩阵,然后对其进行变换,包括平移、旋转和缩放。最后,我们绘制一个线框立方体。在调整窗口大小时,我们将当前矩阵设置为投影矩阵,并调用gluPerspective函数以设置透视投影。在键盘回调函数中,我们根据按键来调整旋转和缩放。
阅读全文