概述
float3 vScreenPos = In.ClipPos.xyz;
vScreenPos /= In.ClipPos.w;
vScreenPos.xy += 1.f;
vScreenPos.xy *= 0.5f;
vScreenPos.y = 1.f - vScreenPos.y;
这个是shader里从vertex最后那个pos 里取 uv的算法
pos是指经过了 world view proj的变换得到的 齐次坐标(x,y,z,w)
我之前 一直不明白 为什么 要xy/w
后来 我认为是这样的 齐次坐标系 是为了 将 P‘=M1 *P+M2 (点P P' 变换矩阵M1 M2)
这种变换 统一到 一个矩阵里表示 就加了一维 使其 把变换统一到 相乘
进行 world view 变换时 w那里一直是一所以可以把 xyz1->xyz想成空间中的点 做各种变换
但是 proj之后 w就不是1了 好像 world view 时M2的系数是1 proj时 M2的系数不是1了(这里表述不严谨 大体是这个意思)
这样 就不能再把 点*Matrix的点当成 空间中对应位置的点 来想象 位置了 这步 就只是个计算 所以最后 要把w除去 以把P‘单独 提出来
/w只是计算中的一步 没有几何意义
理解起来 参见 齐次方程 x+y=0 (A)
非齐次方程 x + y =b (B)
B的解=A的通解+特解
为什么 x=xh
最后
以上就是虚幻路人为你收集整理的投影变换 到 uv坐标 xy/w ---齐次坐标的全部内容,希望文章能够帮你解决投影变换 到 uv坐标 xy/w ---齐次坐标所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复