2011-11-20 65 views

回答

2

您有一個觀點/眼變換V(在一個「地方」你的「相機」)和投影變換P.

剪輯空間座標達到了

clip_position = P * V * world_space_position 

從剪輯空間你通過將夾子空間達到NDC空間由第四裁剪空間座標瓦特座標,即

ndc_x = clip_x/clip_w 
ndc_y = clip_y/clip_w 
ndc_z = clip_z/clip_w 
ndc_w = clip_w/clip_w = 1 

視口XY座標隨後通過將所述範圍達到[-1,1]到第e視口尺寸。 OpenGL和DirectX的區別在於,在OpenGL中,深度範圍[-1,1]映射到[0,DEPTH_BUFFER_RESOLUTION],而在DirectX中,深度範圍[0,1]映射到深度緩衝區值範圍。

+0

視圖/眼睛變換意味着D3DTS_VIEW? – bTagTiger

+1

D3DXMATRIX matProj,matView; m_pd3dDevice-> GetTransform(D3DTS_VIEW,&matView); m_pd3dDevice-> GetTransform(D3DTS_PROJECTION,&matProj); D3DXMatrixMultiply(&matProj,&matProj,&matView); D3DXVec3TransformCoord(&pos,&pos,&matProj); 但pos.z小於-1不在範圍[-1,1] – bTagTiger

+0

@bTagTiger:如果您只對屏幕位置感興趣,則可以放心地忽略Z位置。 – datenwolf