当前位置:   article > 正文

3.4 视口变换

视口变换

视口变换,相当于选择照片大小。视口是一个矩形的窗口区域,图像就是在这个区域中绘制的。

3.4.1 定义视口

定义视口,使用函数glViewport。这个函数之前用过好多遍了。

void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
  • 1

在窗口中定义一个像素矩形,最终的图像将映射到这个矩形中。(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);
  • 1
  • 2
  • 3
  • 4
  • 5

3.4.2 变换深度坐标

在OpenGL中,深度坐标(z坐标)总是被认为位于0.0~1.0的范围之间。当我们需要将坐标范围限制的更小的时候,就需要变换深度坐标。使用的函数叫glDepthRange。

void glDepthRange(GLclampd near, GLclampd far);
  • 1

为z坐标定义了一种编码形式,它是在视口变换期间执行的。near和far值表示经过调整后可以存储在深度缓冲区中的最小值和最大值。在默认情况下,它们分别是0.0和1.0,适用于绝大多数应用程序。这两个参数的范围被限定在【0, 1】之间。也就是说,我们可以使用这个函数,限定比【0,1】更小的范围,比如【0.2, 0.5】。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/589630
推荐阅读
相关标签
  

闽ICP备14008679号