3.4 视口变换

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

3.4.1 定义视口

定义视口,使用函数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);

3.4.2 变换深度坐标

在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】。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值