这个函数作用世界坐标转换,怎么转呢?就是以eye 坐标为中心,xaxis为X轴,yaxis 为Y轴 zaxis 为Z轴转换的。世界坐标都要经过这样转换,转换到摄像机相对坐标,然后投影。
说道投影分为透视投影和平行投影(或正交投影)D3D中
D3DXMatrixPerspectiveFovLH(左手坐标系透视投影)
D3DXMatrixOrthoLH(左手坐标系正交投影)
看看算法:
D3DXMATRIX * D3DXMatrixPerspectiveFovLH(
D3DXMATRIX * pOut,
FLOAT fovy,
FLOAT Aspect,
FLOAT zn,
FLOAT zf
);
xScale 0 0 0
0 yScale 0 0
0 0 zf/(zf-zn)1
0 0 -zn*zf/(zf-zn)0
where:
yScale = cot(fovY/2)
xScale = yScale / aspect ratio
可以看出透视投影,3维点x坐标跟FOV(广角)和投射屏幕纵横比(或者胶卷纵横比)有关系,而y坐标只跟广角有关联。
D3DXMATRIX * D3DXMatrixOrthoLH(
D3DXMATRIX * pOut,
FLOAT w,
FLOAT h,
FLOAT zn,
FLOAT zf
);
2/w 0 0 0
0 2/h 0 0
0 0 1/(zf-zn) 0
0 0 zn/(zn-zf) 1
正交透视X,Y只跟最后投影屏幕的宽高相关联