注意,以下求法的原理不再赘述。最简单的求法请直接跳转文末总结。
文章目录
概述
蕾姆睡醒发现头上有根呆毛,这根呆毛在屏幕上的坐标到底是多少?
流程为:模型空间( 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=⎣⎢⎢⎡100001000010txtytz1⎦⎥⎥⎤⎣⎢⎢⎡cos(θ)0−sin(θ)00100sin(θ)0cos(θ)0001⎦⎥⎥⎤⎣⎢⎢⎡kx0000ky0000kz00001⎦⎥⎥⎤ = [ 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} =⎣⎢⎢⎡10000100001050251⎦⎥⎥⎤⎣⎢⎢⎡−0.8660−0.5001000.50−0.8660001⎦⎥⎥⎤⎣⎢⎢⎡2000020000200001⎦⎥⎥⎤ = [ − 1.732 0 1 5 0 2 0 0 − 1 0 − 1.732