2014-11-21 3 views
3

저는 버텍스 및 프래그먼트 쉐이더에 익숙하지만 프래그먼트 쉐이더가 버텍스 쉐이더의 출력에서 ​​프래그먼트 양을 결정하는 방법에 대해서는 여전히 혼란 스럽습니다.프래그먼트 셰이더가 버텍스 셰이더 출력에서 ​​조각 수를 결정하는 방법은 무엇입니까?

GLSL에서 삼각형 프리미티브를 그리면 모든 정점에 대해 버텍스 셰이더가 세 번 실행되고 조각 쉐이더가 각 조각마다 한 번씩 (조각 수에 따라) 여러 번 실행됩니다.

조각 쉐이더가 조각을 어떻게 결정하는지 알고 싶습니까? 그것은 gl_Position을 사용합니까? 내 버텍스 쉐이더에서 gl_Position을 설정하지 않으면 프래그먼트 셰이더가 여전히 프래그먼트를 생성 할 수 있습니까?

gl_position은 매번 버텍스 셰이더에서 설정해야합니까?

답변

10

당신은 스캔 변환으로 알려진 래스터 화 단계에 대해 이야기하고 있습니다. GPU는 버텍스 쉐이더에 의해 생성 된 위치를 취해 속성을 보간하여 프래그먼트 쉐이더로 전달되는 프래그먼트를 생성합니다. 그래서 네, 꼭지점 셰이더에 gl_Position을 설정하는 것이 중요합니다.

삼각형의 좌표를 창 좌표로 변환 한 후, 스캔 변환은 삼각형을 취해 삼각형이 포함하는 출력 이미지 위에 창 픽셀의 배열을 기반으로 삼각형을 분해합니다. Source.

scan conversion of a triangle

+0

내 버텍스 쉐이더를 통과 할 때마다 하나의 변수에 보간 될 것을 의미합니다 gl_Position에 따라? 예를 들어 버텍스에서 프래그먼트 쉐이더까지 키워드를 사용하여 텍스처 좌표를 전달하면 각 프레 임마다 보간됩니다. – ammar26

+2

예. 기본 보간 한정자는 'smooth'이므로 모든 들어오는 속성은 원근법에 맞게 보간됩니다. – warrenm

관련 문제