2014-02-21 3 views
0

일부 DirectX 형식의 자료를 실험하기 시작했으며 스케일링 행렬에 대한 질문이있었습니다. 나는 내보기 행렬을 설정하는 경우 :DirectX 및 음수 배율

XMMatrixTranspose (XMMatrixIdentity() * XMMatrixScaling (1.0F, 2.0f, 1.0F))

그런 다음 y 축에있는 모든 (A 중심 사각형)보다 두 배 큰 나타납니다 , 그것은 내가 기대하는 것입니다. 내가 음수, ALA로 설정하는 경우 :

XMMatrixScaling (1.0F, -2.0f, 1.0F)

그런 다음 모든 것이 사라집니다. 사실, scale matrix의 값을 < 0으로 설정하면 아무 것도 나타나지 않습니다. 이미지가 해당 축을 따라 '뒤집혀'있을 것이라고 예상했지만 전혀 나타나지 않았습니다. 스케일링 할 때 음수 값을 사용할 수 있습니까? 아니면 완전히 잘못된 것을하고 있습니까?

답변

1

이 원인은 back-face cullingclipping입니다. 컬링 (culling)이 활성화되어 있다고 가정하면 (기본값), x 또는 y 축의 크기를 음수로 설정하면 모든 삼각형의 와인딩 순서가 반전됩니다. 이로 인해 모든 삼각형이 "거꾸로"간주되고 GPU가 그 삼각형을 그려 내지 않습니다. 다른 변형 행렬이 적용되지 않았고 사각형이 xy 평면에 있다고 가정하면 z 기호를 뒤집 으면 삼각형이 뒤쪽으로 향하게되는 대신 정사각형이 뷰포트 외부에있게됩니다 (예 : z = 0.5, veiwport 깊이 범위의 중간, z = -0.5, 뷰포트 깊이 범위 외부).

대부분의 3D 장면은 닫힌 지오메트리가 있거나 (적어도 열린 부분을 볼 수 없기 때문에) 후면면 제거는 성능 최적화입니다. 즉, 모든 뒤 향함 삼각형은 그 앞면을 마주 보는 삼각형을 가져야하므로 뒤쪽 꼭지점을 그리는 데는 아무런 포인트가 없습니다. 때로는 게임을 해본 적이 있고 바위 나 벽에 너무 가까이 접근 해 전체 물체를 볼 수 있었던 경우가 있습니다. 왜냐하면 앞면을 훑어 보았 기 때문입니다. 다른 쪽은 뒤쪽을 향하고 있고, 그려지지 않습니다.