당신이 관점을 제공하는 관점 매트릭스가 사용하고있는 투영 행렬을 평가. 3D로 작업 할 때는 괜찮지 만 2D (예 : GUI 렌더링)를 렌더링 할 때는 원근감을 추가하지 않으려 고합니다.
직교 행렬은 근본적으로 원근감을 무시하는 매트릭스이므로 거리의 물건은 가까운 물건만큼 크다.
Perspective vs Orthigonal
O---------O O---------O
|\ /| | |
| o-----o | | |
| | | | | |
| o-----o | | |
|/ \| | |
O---------O O---------O
그래서 귀하의 경우에 발생합니다
그들 사이의 차이는 당신이 상자 (상단 누락 된 큐브)를 그리면 다음으로 시각화 할 수 있습니까? 글쎄, 화면 중앙에있는 물체는 화면 중앙에있는 물체보다 멀리 떨어져 있습니다. 그 때문에 그들은 더 가까이 다가 간다.
예 :
A B C Point A (-5, 0, 5)
\ | / Point B (0, 0, 5)
\ | / Point C (5, 0, 5)
\ | /
\ |/
\ |/
\|/
V
당신이 A 지점을 볼 수 있고 B는 더 멀리있는 것처럼. 우리가 정말 기본적인 관점을 사용하는 경우 (그것은 더 복잡하지만, 예로서 충분) 각 점은 우리는 다음 식에 사용하는 것이 화면에 와서 위치를 계산 : 이제 직교 행렬 것
Vector2 Perspective(Vector3 pos)
{
return Vector2(pos.x, pos.y)/pos.length();
}
을 다음의 라인을 따라 더 : 새로운 직교 행렬 기존의 관점 매트릭스를 교체 할 때
Vector2 Orthogonal(Vector3 pos)
{
return Vector2(pos.x, pos.y);
}
그래서 당신은 더 이상 시각에 문제가 없습니다.
당신은 Direct3D를 또는 Direct2D의를 사용하고 장치에 할당하기 전에 변환 행렬에 m.Transpose()를 호출 잊어 버린 것 같아? – Rafael
Direct3D - 가능한 동일한 장치/버퍼에서 2D와 3D를 모두 렌더링하려는 경우 – user2152466
@ user2152466 코드를 붙여 넣지 마십시오. – zdd