2013-04-08 5 views
0

DirectX (11)를 사용하여 2D 지오메트리를 렌더링하고 싶습니다. 일반적으로 적용 할 위치 인 꼭지점을 전혀 변환하지 않는 효과 파일을 만들어서 시도했습니다 귀하의 세계 /보기/프로젝션 매트릭스 난 그냥 (untransformed) 입력을 반환합니다.2D 렌더링 용 DirectX 파이프 라인 사용

예상대로 작동했으며 내 쿼드가 표면에 올바르게 렌더링되었습니다. 그런 다음 X 축을 따라 2D로 변환하여 시도하고 이상한 원근법을 변경했습니다.

사람들이 직교 변환 행렬을 사용하는 것에 대해 이야기하고 있지만 왜 이해가 안되는지 봅니다. 일반 3D 데이터를 2D로 변환하고 싶지 않습니다. 2 차원 데이터를 2 차원으로 변환하고 싶습니다. (그리고 아마 2d 번역/스케일도)

내가 파이프 라인에 대해 중요한 것을 놓친 느낌이 들었습니까?

는 어떤 도움을

+0

당신은 Direct3D를 또는 Direct2D의를 사용하고 장치에 할당하기 전에 변환 행렬에 m.Transpose()를 호출 잊어 버린 것 같아? – Rafael

+0

Direct3D - 가능한 동일한 장치/버퍼에서 2D와 3D를 모두 렌더링하려는 경우 – user2152466

+0

@ user2152466 코드를 붙여 넣지 마십시오. – zdd

답변

1

나는 당신이 아마 건설 마치고하지만

1

당신이 관점을 제공하는 관점 매트릭스가 사용하고있는 투영 행렬을 평가. 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); 
} 

그래서 당신은 더 이상 시각에 문제가 없습니다.

+0

감사합니다. 그러나 원근감 매트릭스를 사용하고 있지 않습니다. - 나는 단위 매트릭스 (DirectX 직교 행렬이 아님)를 사용하고 있습니다. 왜 2D 렌더링을위한 단위 행렬에 대해 직교 행렬이 필요한지 또는 그 차이점은 무엇인지 모르겠습니다. – user2152466

+0

포인트 [0.9 0.9]와 [-0.9 -0.]을 포함하는 전체 화면 쿼드를 렌더링 해보십시오.9] 만약 당신이 외부 테두리를 제외한 전체 화면을 채우는 쿼드를 제공한다면 당신은 ** 원근감에 문제가 없지만 이미지는 단지 뻗어 있습니다. 그런 경우에는 입력이 윈도우 내부 (즉, 그리기 영역)와 동일한 직교 행렬을 사용하면됩니다. 스트레칭 효과가 해결됩니다. – DevWouter