学习OpenGL ES之透视和正交投影
时间: 2023-11-11 16:06:42 浏览: 130
OpenGL ES 中的投影矩阵可以使用透视投影和正交投影两种方式进行设置。
透视投影是一种模拟人眼观察物体的方式,近处的物体看起来比远处的物体大,而且在远处的物体看起来比在近处的物体更小。在 OpenGL ES 中,透视投影的矩阵通常由 glFrustum() 或者 gluPerspective() 函数生成。这些函数所需要的参数包括视角、画面宽高比、近裁剪面和远裁剪面的距离。
正交投影则是一种无论远近都能保持物体大小一致的投影方式。在 OpenGL ES 中,正交投影的矩阵通常由 glOrtho() 函数生成。这个函数需要指定可视空间的左、右、上、下、近、远六个面。
下面是一个简单的 OpenGL ES 代码示例,使用透视投影和正交投影来绘制一个立方体:
```c++
// 使用透视投影绘制立方体
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1, 1, -1, 1, 1, 10);
// 绘制立方体
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, -5);
glRotatef(angle, 1, 1, 1);
glColor3f(1, 0, 0);
glutWireCube(2);
// 使用正交投影绘制立方体
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2, 2, -2, 2, 1, 10);
// 绘制立方体
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, -5);
glRotatef(angle, 1, 1, 1);
glColor3f(0, 0, 1);
glutWireCube(2);
```
其中,glFrustum() 函数生成的透视投影矩阵,可以让离观察者比较近的物体显得比较大,而离观察者比较远的物体显得比较小。glOrtho() 函数生成的正交投影矩阵,则可以让物体无论离观察者多远,都保持一致的大小。
需要注意的是,在使用不同的投影方式时,需要先将当前矩阵模式设置为投影矩阵模式,然后再进行矩阵的设置和变换。最后,需要将矩阵模式设置回模型视图矩阵模式,以便绘制物体。
阅读全文