-
픽킹(picking) - 1GamePrograming/Direct3D 2010. 7. 13. 11:40
이번 과제에서 화면상의 좌표를 변경하는데 있어 2D 평면이 주를 이루기 때문에
마우스 좌표를 광선으로 변경하는 것보다 오브젝트의 좌표를 화면상의 좌표로 변경시키는
함수를 제작했다.//----------------------------------------------------------------------------- // Name: D3DUtil_VecToScreen() // Desc: 벡터를 스크린 좌표로 변환한다 //----------------------------------------------------------------------------- D3DXVECTOR3 D3DUtil_VecToScreen( D3DXMATRIXA16& WVP, int width, int height, D3DXVECTOR3 vec) { D3DXVECTOR3 v; D3DXVec3TransformCoord(&vec, &vec, &WVP); v.x = (-1.0f - vec.x) / (-2.0f) * width; v.y = (1.0f - vec.y) / (2.0f) * height; v.z = vec.z; return v; } //----------------------------------------------------------------------------- // Name: D3DUtil_ScreenToVec() // Desc: 스크린 좌표를 벡터로 변환한다. //----------------------------------------------------------------------------- D3DXVECTOR3 D3DUtil_ScreenToVec( D3DXMATRIXA16& WVP, int width, int height, D3DXVECTOR3 vec) { D3DXVECTOR3 v; v.x = -1.0f - (vec.x / width * (-2.0f)) ; v.y = 1.0f - (vec.y / height * (2.0f)) ; v.z = vec.z; D3DXMATRIXA16 matInverse; D3DXMatrixInverse(&matInverse, NULL, &WVP); D3DXVec3TransformCoord(&v, &v, &matInverse); return v; }