D3DXMatrixOrthoLH( &m_ProjectionTM,m_width,m_height,m_zn,m_zf );
이처럼 직교투영을 설정한후
윈도우 사이즈인 width , height 의 비(aspect)에 맞게 m_height, m_width 를 증가시켜준다, 혹은 감소
직교투영 픽킹시에는 윈도우 에 맞게 픽킹이 되려면 화면좌표에서 카메라 좌표까지 변환할때 다음과 같이 처리해주면 된다
D3DXVECTOR3 WindowVector= D3DXVECTOR3(0.0f,0.0f,0.0f);
// 화면좌표에서 투영좌표로
WindowVector.x = (( ((float(Pt.x)*2.0f/width ) - 1.0f)) );
WindowVector.y = (( -((float(Pt.y)*2.0f/height) - 1.0f)) );
* 여기서 화면 사이즈 width, height
-> -1 ~ 1 사이로 변환 한다
카메라까지 지나온점 Pc 라 정의하면 다음과 같이 투영좌표에서 카메라 좌표로 변환된 식을 얻을 수 있다
Pc * 투영행렬 * 화면좌표계행렬 = p` 을
Pc 에 대하여 푼다
이것에 대한 소스는 다음과 같다
// 투영좌표에서 카메라 좌표로 변환
WindowVector.x = (WindowVector.x - ProjectionTM->_14) / ProjectionTM->_11;
WindowVector.y = (WindowVector.y - ProjectionTM->_24) / ProjectionTM->_22;
출처 : http://www.cyworld.com/sjh0628
'수학 (Mathematics) > 3D수학' 카테고리의 다른 글
에르미트 (0) | 2012.11.02 |
---|---|
Z-Fighting (0) | 2012.11.02 |
폴리곤중간의 텍스처 좌표 구하기 (0) | 2012.11.02 |
[D3DX] Vertex Normal (0) | 2012.11.02 |
Directx Aspect 비율 (0) | 2012.11.02 |