openGL中glOrtho和glViewPort的区别

cra*_*xel 9 opengl 3d graphics opengl-1.x

我正在努力想出一些东西让我说我渲染一些高度为100,宽度为100的图像.

在方案A中

我正在一个glOrtho(0,100,0,100,-100,100)glViewPort(0,0,50,50)时定义为(左,右,顶部,底部,zNear,zFar)和glViewPort被定义为(左下角的x,左下角Y,宽度,高度)glOrthois.

在方案B中

我正在一个glOrtho(0,50,0,50,-100,100)glViewPort(0,0,100,100)glOrthois定义为(左,右,顶部,底部,zNear,zFar)和glViewPort被定义为(左下角的x,左下角Y,宽度,高度)

这基本上意味着在场景A中,图像将被渲染到比它需要的更低的宽度和高度(即,将每两个像素渲染一次).在原始图像中将映射到目标"表面"中的一个,但仍然可以看到整个图像.

但是,在场景B中,图像将被剪裁,因此只能看到它的左上角.我对么?- 只是为了清楚,这是一个CG测试的问题我有tommorow,我想确保我正确得到openGL ...(已经读过API ... =\)

Gam*_*per 26

glViewPort 采用屏幕像素单位:就是这样,它与显卡"内部"的3D世界无关.它只是告诉窗口的一部分将用于渲染(或只是可见).

相反,glOrtho 改变了"内部"世界并且是OpenGL单元:更多OpenGL单元将适合屏幕的可见部分,因此如果增加正交尺寸,"更大"的对象将很容易适合可视区域.

修改视口不会改变视锥,实际上相同的图像将被拉伸以适应新的视口.

解释图像:

图1:视口是半窗口

在此输入图像描述

图2:如果我只是将视口加倍,图像就会变得拉伸(相同的平截头体填充不同的表面)

在此输入图像描述

因此,保持纵横比的唯一解决方案是加倍正交尺寸(在这种情况下,我是双左右值)

图3:最终结果(请注意,现在可以看到3d世界的更大部分):

在此输入图像描述

有关OpenGL NeHe制作的相当熟悉的网站提供了更多详细信息.