2016-08-11 3 views
0

내 시행 착오의 경험에서 볼 때 DirectX 픽셀 쉐이더는 DirectX에서 렌더링 한 기하학적 기본 요소의 범위 내에있는 픽셀/조각에만 실행되고 프레임의 픽셀은 단순히 선명한 색.WPF 픽셀 쉐이더처럼 프레임의 모든 픽셀에서 DirectX 픽셀 쉐이더가 작동합니까?

MSDN says는 :

픽셀 셰이더는 버텍스 쉐이더와 협력하여 일한다 버텍스 쉐이더의 출력은 픽셀 쉐이더에 대한 입력을 제공합니다. WPF 알거나 기하학적 원시적 픽셀된다는 것이 무엇을 의미하는지 상관하지 않는다, 따라서 3D 프리미티브를 렌더링하지 않기 때문에

이것은 프레임의 모든 픽셀을 위해 실행되는 WPF 픽셀 쉐이더에 대조를 이룬다 또는 클리어 컬러 픽셀 일 수있다.

다음 이미지에서 DirectX 픽셀 쉐이더는 정점 쉐이더의 기하학적 기본 출력에 해당하기 때문에 흰색 영역에서만 실행되지만 검정색 영역에서는 출력되지 않기 때문에 명확한 컬러이기 때문에 . 반면 WPF 픽셀 쉐이더는 프레임의 모든 픽셀 (흰색과 검정색 모두)에 대해 실행됩니다.

이 이해가 맞습니까?

+0

내 대학 과정 (2 년 전)에서 버텍스 쉐이더와 픽셀 쉐이더가 모두 올바르게 기억된다면. 버텍스 쉐이더에 전달한 다음 픽셀 쉐이더로 전달하므로, 그 부분에서 효과는 해당 지오메트리의 픽셀에만 적용됩니다. 픽셀 쉐이더가 전체 씬에 영향을 주길 원한다면 전체 씬을 텍스처에 전달하십시오. 그래서 당신이 그것에 대해 생각한다면, 당신은이 경우에 사각형 모양을 전달할 것입니다. – Sam

답변

1

픽셀 쉐이더 호출은 드로잉 프리미티브 (예 : 삼각형)에 의해 트리거됩니다. 사실, 예를 들어 첫 번째 삼각형의 꼭대기에 두 번째 삼각형이 그려지는 경우, 윈도우의 픽셀은 두 개 이상의 픽셀 쉐이더 호출을 가져올 수 있습니다. 이를 이라고 부르며을 피하는 것이 일반적입니다. 가장 일반적인 회피 방법은 z-culling입니다.

창의 모든 픽셀에 대해 픽셀 쉐이더를 트리거하려면 "전체 화면 4 분면"을 구성하는 두 개의 삼각형, 즉 좌표 (-1,-1) ~ (1,1)을 그립니다. 뒤에는 WPF가 기본적으로하는 일이 있습니다.

+0

고마워, 그게 내가 찾고 있던 바로 그거야! :) – artisticdude