赞
踩
视口变换,相当于选择照片大小。视口是一个矩形的窗口区域,图像就是在这个区域中绘制的。
定义视口,使用函数glViewport。这个函数之前用过好多遍了。
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
在窗口中定义一个像素矩形,最终的图像将映射到这个矩形中。(x, y)参数指定了视口的左下角,width和height表示这个视口矩形的宽度和高度。在默认情况下,视口的初始值是(0, 0, winWidth, winHeight),其中winWidth和winHeight指定了窗口的大小。
这里注意,视口的纵横比一般和视景体的纵横比相同。如果这两个纵横比不同,当图像投影到视口时就会变形。如下图所示。
为了避免变形可以修改投影的纵横比,使它与视口相匹配。
int width = 400;
int height = 200;
double aspect = width / height;
gluPerspective(fovy, aspect, near, far);
glViewport(0, 0, width, height);
在OpenGL中,深度坐标(z坐标)总是被认为位于0.0~1.0的范围之间。当我们需要将坐标范围限制的更小的时候,就需要变换深度坐标。使用的函数叫glDepthRange。
void glDepthRange(GLclampd near, GLclampd far);
为z坐标定义了一种编码形式,它是在视口变换期间执行的。near和far值表示经过调整后可以存储在深度缓冲区中的最小值和最大值。在默认情况下,它们分别是0.0和1.0,适用于绝大多数应用程序。这两个参数的范围被限定在【0, 1】之间。也就是说,我们可以使用这个函数,限定比【0,1】更小的范围,比如【0.2, 0.5】。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。