Unity 关于透视投影视口变换

https://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/projection-matrix-GPU-rendering-pipeline-clipping
unity里的有个computeScreenPos的实现

float4 ComputeScreenPos(float4 positionCS)
{
    float4 o = positionCS * 0.5f;
    o.xy = float2(o.x, o.y * _ProjectionParams.x) + o.w;
    o.zw = positionCS.zw;
    return o;
}

很疑惑,为啥o.xy是这样去构造的呢??
我们先看张图

请添加图片描述
原来”投影“是为了更好的裁剪

然后这里https://zhuanlan.zhihu.com/p/404516361
说了为啥要这样去构造

是为了在最后做透视除法,那么这个W是啥呢?
可以看看这个视频
https://www.youtube.com/watch?v=VpNJbvZhNCQ&t=173s

在这里插入图片描述
x’ = d * x / z, w = -z / d

深度空间的构造?

http://www.humus.name/temp/Linearize%20depth.txt

更深入

可以看看《shader入门精要》第4章 4.6.7 那里说的很详细

为啥是-z

https://stackoverflow.com/questions/33407209/why-does-the-camera-face-the-negative-end-of-the-z-axis-by-default

有说到因为opengl是右手坐标系
在这里插入图片描述
我猜测,为了统一Opengl和DX,unity先把他搞到opengl-like然后再做统一处理?

View space to Clip Space

以下图片来自 shader入门精要
在这里插入图片描述

unity 的矩阵

在这里插入图片描述
注意看Z

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值