读书人

OpenGL进阶(1)多视口

发布时间: 2012-12-27 10:17:10 作者: rapoo

OpenGL进阶(一)多视口

提要

OpenGL视口(Viewport)可以看作是窗口中OpenGL的绘制输出区域,可以通过一条简单的glViewport命令设置。一般的OpenGL教程都是单视口,即整个窗口为惟一的一个视口,Nehe的OpenGL教程是我最早见到涉及多视口的。与单视口程序相比,多视口程序的变化主要是:

(一)多视口程序不能在窗口resize/reshape时直接调用glViewport,而应该在此时记下窗口大小,然后在绘制场景时多次调用glViewport设置每个视口的位置和大小;

(二)对于每个视口,应分别调用glMatrixMode(GL_PROJECTION)和glMatrixMode(GL_MODELVIEW)以设置投影和建模矩阵。

多视口的最常见的应用,就是3DMax中的多视口建模,每一个观察口都从不同的方向去观察模型,从而很方便地去获取模型当前的状态。

还有就是赛车游戏中的后视镜等等.

具体实现的思路就是对每个视口进行独立的渲染。


函数解析

下面是需要调用到的一些OpenGL的函数。

glLoadIdentity()

重置当前指定的矩阵为单位矩阵.

glViewport(GLint x,GLint y,GLsizei width,GLsizei height)

在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。

void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)

建立了一个可视的二位平面区域。这个和用glOrtho函数的当near=0,far=1时效果是一样。

void gluPerspective(GLdouble fovy, GLdouble aspect,GLdouble zNear,GLdouble zFar)

这个函数指定了观察的视景体(frustum为锥台的意思,通常译为视景体)在世界坐标系中的具体大小,一般而言,其中的参数aspect应该与窗口的宽高比大小相同。

void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)

设置一个裁剪窗口,前两个参数为窗口左下角位置,后两个参数是窗口的宽度和高度。

使用前一定要glEnable(GL_SCISSOR_TEST);

代码实现

实现一:



实现二:



参考:OpenGL中的多视口-

读书人网 >编程

热点推荐