OpenGL裁剪空间浅析

OpenGL坐标系统变化可用下图概括,原始图像来源

本文重点讲解关于裁剪空间和视口变换。

从透视投影矩阵开始,下述代码中第一个参数代表角度,结合图像很容易理解,第二个参数设置为视口宽高比,那么问题来了,为什么设置为视口宽高比?设置后对裁剪空间有何影响?

在回答上述问题前,首先解决投影空间的问题,近/远平面的宽高比是否等于设置的视口宽高比?我个人认为等于或有某种相关,不然无法确定投影空间。

打个比方来说,比例设为0.5,透视过后会变长,视口比例也是0.5,从裁剪空间到屏幕空间又会变短,恢复原状。

比较难懂,但以后在实践中应该会有新体会,但目前关于三个参数,基本可以明确以下几点(个人理解):

  • 首先对于参数1的角度,角度越大,平截头体的面积越大,能看到的范围就越大,裁剪空间会根据透视除法映射到[-1,1],可视为一个正方形空间,虽然对于每个向量可能有不同的w分量,但x、y和z分量的比值不变。
  • 透视除法后的x/y和参数2互为相反数,就像上文所说,如果拿一个正方形进行透视,宽高比例设为一个小于1的数,透视结果应为一个正方形空间中有一个长方形作为透视结果。
  • 参数三表示距离摄像机的距离

glm::mat4 proj = glm::perspective(glm::radians(45.0f), (float)width/(float)height, 0.1f, 100.0f);

对于视口变换,就是把裁剪空间的结果映射到屏幕空间,此时有一个关键的问题,根据上文可知,裁剪结果宽高比和作为参数的宽高比互为倒数,当我把一个正方形空间的裁剪结果映射到具有某个宽高比(这个宽高比将作为参数2)的屏幕上时,裁剪结果刚好恢复为一开始设置坐标值的时候的比例,避免产生形变。但若此时视口变换更改宽和高的比例后,仍会产生形变。

OpenGL是一个右手坐标系,在标准化设备坐标系中OpenGL实际上使用的是左手坐标系(投影矩阵交换了左右手)。

理解的很含糊,未来会改(也许)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值