DirectX RHW和viewport

我们知道,viewport是用来设定渲染后的场景在render target中的位置和大小的,也就是场景会被拉伸到指定的viewport中。但是一旦和pre transformed坐标一起使用,那就是另外一回事了。rhw,即reciprocal homogeneous w,我们在指定pre transformed顶点坐标时,w分量被称为rhw。通常,经过投影变换后的顶点在clip space,此时dx会对该坐标进行clip,clip的依据是顶点坐标的w分量,在变换的最后才会进行透视除。一旦使用pre transformed坐标,我们就省略了model, view, projection这些变换,因为我们告诉dx,我们提供的坐标就是变换过的,已经变换到了屏幕坐标。但是dx还是会进行clipping,那么dx要做的就是,将我们的pre transformed坐标结合rhw值,和viewport变换回clip space进行clipping。

我们知道投影后,随后会透视除,再进行viewport变换。那么逆变换就是乘以viewport的逆矩阵,之后再乘以rhw值即可。

假设我们有pre transformed顶点(150, 50, 0, 1),viewport 大小为(150, 250),viewport坐标为(150, 50),那么,根据上边的逆变换可以得到变换到clip space的坐标为(-1, 1, 0, 1)。可以看出这个坐标为clip space左上角。

从实际效果可以看出,如果使用pre transformed顶点,若改变viewport位置,效果类似于clipping,而不像用未转换的顶点时的效果就是简单的拉伸和平移。

测试时我用了dx9的vetices例子。

参考:

Viewports And Clipping (DirectX 9)

DirectX Transformation Pipeline


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值