2012-04-12 3 views
0

gl_Normal에서 버텍스 쉐이더에서 정점 법선을 얻을 수 있다는 것을 알고 있습니다.GLSL의 프래그먼트 쉐이더에서 프래그먼트의 첫 번째 정점 법선을 얻는 방법

이제 프래그먼트의 색상을 첫 번째 정점의 정점 법선으로 설정하려고합니다. 어떻게 할 수 있습니까? 조각에있는 정점의 수와 조각 쉐이더의 각 정점에 대한 위치와 법선이 무엇인지 어떻게 알 수 있습니까?

답변

3

당신이 묻는 것은 결코 가능하지 않지만 충분히 가까워 질 수 있습니다.

프리미티브의 '첫 번째 정점'에서 법선을 가져올 수 없습니다. 여러분이 할 수있는 것은 버텍스 쉐이더의 법선 쉐이더를 프래그먼트 쉐이더로 다양하게 전달하는 것입니다. 그러나 각 프래그먼트는 폴리곤의 각 꼭지점에서 보간 된 법선을 갖게됩니다.

프래그먼트 셰이더에서 정점의 특정 속성에 액세스 할 수 없으며 보간 된 값만 액세스 할 수 있습니다. 나는, 어떤 경우에는 올바르지 코멘트를 아래에 볼 수 있습니다처럼

== 편집 ==

보인다.

+1

내포 된 '평면'을 정의 할 수 있습니다. 실제로는 전체 삼각형에 단일 꼭지점의 값을 사용하지만, 첫 번째인지 마지막인지 또는 정의되지 않았는지 확실하지 않습니다. 그러나 이것은 새로운 GLSL 버전에서만 사용 가능합니다. (GL 3+ 어쩌면) 생각합니다. –

+0

@ChristianRau 감사합니다. 그 사실을 몰랐습니다. 기본적으로 마지막 꼭짓점 인 것처럼 보입니다. * 프리미티브의 자극적 인 꼭지점은 평면 음영이 사용되는 경우 일정한 기본 색상과 보조 색상을 결정하는 정점입니다. OpenGL에서 triangle, quad, line 및 (흔히) 점 기본 요소에 대한 자극 점은 기본 을 어셈블하는 데 사용 된 마지막 꼭짓점입니다. 다각형 프리미티브는 OpenGL에서 예외입니다. 폴리곤 프리미티브의 첫 번째 꼭지점은 다각형의 색상을 결정합니다. 실제로는 삼각형 및/또는 쿼드로 분할 되어도 * – Tim

+0

호출 할 수 있습니다. glProvokingVertex (GL_LAST_VERTEX_CONVENTION)를 호출하여 자극하는 정점을 변경할 수 있지만 OGL 3.2 이상 버전에서 사용할 수 있습니다. – debonair

관련 문제