1、调用OpenGL三维绘图函数,绘制两个以上的物体(球体、圆锥体、多面体、环或茶壶),变换他们的位置。 2、采用透视变换及正交变换分别对他们进行观察。 3、透视变换中变换观察空间的大小分别对他们进行观察(观测角、近远端截面距离等)。 4、变换观测点位置对他们进行观察。 5、将不同的图形观察结果显示在同一窗口的不同视口中。直接输出代码
时间: 2023-07-10 07:05:50 浏览: 56
由于OpenGL的代码比较长,同时本人也不是OpenGL专家,因此以下提供一个简单的示例代码,仅供参考:
```c++
#include <GL/glut.h>
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 绘制球体
glPushMatrix();
glColor3f(1.0, 0.0, 0.0);
glTranslatef(-1.5, 0.0, -6.0);
glutSolidSphere(1.0, 20, 16);
glPopMatrix();
// 绘制圆锥体
glPushMatrix();
glColor3f(0.0, 1.0, 0.0);
glTranslatef(1.5, 0.0, -6.0);
glRotatef(90.0, -1.0, 0.0, 0.0);
glutSolidCone(1.0, 2.0, 20, 16);
glPopMatrix();
// 绘制多面体
glPushMatrix();
glColor3f(0.0, 0.0, 1.0);
glTranslatef(0.0, 0.0, -6.0);
glutSolidTetrahedron();
glPopMatrix();
// 绘制环
glPushMatrix();
glColor3f(1.0, 1.0, 0.0);
glTranslatef(-3.0, 2.0, -8.0);
glutSolidTorus(0.5, 1.0, 20, 16);
glPopMatrix();
// 绘制茶壶
glPushMatrix();
glColor3f(1.0, 0.0, 1.0);
glTranslatef(3.0, 2.0, -8.0);
glutSolidTeapot(1.0);
glPopMatrix();
glutSwapBuffers();
}
void reshape(int w, int h) {
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL 3D Demo");
glEnable(GL_DEPTH_TEST);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
```
该代码演示了如何绘制五个三维物体(球体、圆锥体、多面体、环、茶壶),并且使用透视变换进行观察。其中,`glutSolidSphere`、`glutSolidCone`、`glutSolidTetrahedron`、`glutSolidTorus`、`glutSolidTeapot`为OpenGL提供的绘制函数。`glTranslatef`和`glRotatef`为变换函数,用于改变物体的位置和旋转角度。`gluPerspective`为透视变换函数,用于设置观测角度、近远端截面距离等参数。`glViewport`用于将窗口分割成多个视口。`glMatrixMode`和`glLoadIdentity`用于切换和重置矩阵模式。`glEnable`用于开启深度测试功能,使得物体的覆盖关系按照深度值进行判断。