Unity Shader总结(三)——顶点变换之蕾姆的呆毛在哪里

注意,以下求法的原理不再赘述。最简单的求法请直接跳转文末总结。

概述

蕾姆睡醒发现头上有根呆毛,这根呆毛在屏幕上的坐标到底是多少?
在这里插入图片描述
流程为:模型空间( P m o d e l P_{model} Pmodel)——>世界空间( P w o r l d P_{world} Pworld)——>观察空间( P v i e w P_{view} Pview)——>裁剪空间( P c l i p P_{clip} Pclip)——>屏幕空间
假设呆毛顶点的模型坐标为(0,2,4),扩展到齐次坐标系下为(0,2,4,1)

一、模型空间——>世界空间(模型变换)

在这里插入图片描述
计算其变换矩阵,注意顺序(缩放(zxy)、旋转、平移,从右向左)
M m o d e l = [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] [ c o s ( θ ) 0 s i n ( θ ) 0 0 1 0 0 − s i n ( θ ) 0 c o s ( θ ) 0 0 0 1 ] [ k x 0 0 0 0 k y 0 0 0 0 k z 0 0 0 0 1 ] M_{model}=\begin{bmatrix} 1&0 &0 & t_{x}\\ 0& 1 & 0 &t_{y} \\ 0& 0& 1& t_{z}\\ 0& 0& 0&1 \end{bmatrix}\begin{bmatrix} cos(\theta)&0 &sin(\theta) & 0\\ 0& 1& 0 &0\\ -sin(\theta)& 0& cos(\theta)\\ 0& 0& 0&1 \end{bmatrix}\begin{bmatrix} k_{x}&0 &0 & 0\\ 0& k_{y} & 0 &0\\ 0& 0& k_{z}& 0\\ 0& 0& 0&1 \end{bmatrix} Mmodel=100001000010txtytz1cos(θ)0sin(θ)00100sin(θ)0cos(θ)0001kx0000ky0000kz00001               = [ 1 0 0 5 0 1 0 0 0 0 1 25 0 0 0 1 ] [ − 0.866 0 0.5 0 0 1 0 0 − 0.5 0 − 0.866 0 0 0 1 ] [ 2 0 0 0 0 2 0 0 0 0 2 0 0 0 0 1 ] =\begin{bmatrix} 1&0 &0 & 5\\ 0& 1 & 0 &0 \\ 0& 0& 1& 25\\ 0& 0& 0&1 \end{bmatrix}\begin{bmatrix} -0.866&0 &0.5 & 0\\ 0& 1& 0 &0\\ -0.5& 0& -0.866\\ 0& 0& 0&1 \end{bmatrix}\begin{bmatrix} 2&0 &0 & 0\\ 0&2& 0 &0\\ 0& 0& 2& 0\\ 0& 0& 0&1 \end{bmatrix} =100001000010502510.86600.5001000.500.86600012000020000200001               = [ − 1.732 0 1 5 0 2 0 0 − 1 0 − 1.732

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值