2012-10-29 5 views
2

gl_Normal을 사용하지 않고 오브젝트를 번개로 렌더링하려면 프래그먼트 쉐이더를 쓰고 싶습니다. 그래서 나 자신에 의해 법선을 계산해야합니다.glNormal없이 프래그먼트 쉐이더에서 일반 계산하기

저는 dFdx와 dFdy 함수를 사용하여 두 개의 접선 벡터를 찾은 다음 해당 벡터의 곱으로 법선을 얻을 수 있다고 생각합니다.

그러나 이러한 매개 변수로 보낼 매개 변수를 알 수 없습니다.

+0

픽셀 당 평활화 된 정상 또는 얼굴 당 그냥 필요합니까? – zacaj

답변

4

dFdx 및 dFdy 함수를 사용하여 두 개의 접선 벡터를 찾은 다음 해당 벡터 곱을 사용하여 법선을 얻을 수 있다고 생각합니다.

이렇게하면 얼굴 법선 만 표시됩니다. 그리고 만약 당신이 패싯 렌더링을한다면, 괜찮을 것입니다. 그리고 "함수에 전송할 매개 변수"는 여러분이 조명을하고있는 공간에서 조각의 위치가됩니다. 따라서 분명히 여러분의 버텍스 쉐이더는 그것을 계산하여 프래그먼트 셰이더에 전달해야합니다.

이 게시물의 나머지 부분에서는 이 아니라고 가정합니다.면 처리 된 렌더링은이 아닙니다. 평활한 법선이 매끄러운 표면에 가까워 지길 원합니다.

같은 법선의 요점은 당신의 다각형 메쉬을 근사 입니다 실제 표면을 나타내는 것입니다. 따라서 구가 있다면 각 정점 위치의 법선은 정점 수에 상관없이 항상 구의 중심에서 직접 향해야합니다.

그런 법선을 마술처럼 사용할 수는 없습니다. 실제 서페이스 또는 경험적 방법을 기반으로 계산해야합니다. 경험적 방법은 현재의 주위 삼각형을 볼 것을 요구합니다. 조각 쉐이더는 해당 정보에 액세스 할 수 없습니다.

누구나 정점 법선을 사용합니다. 그것은 표준 관행입니다. 이러한 법선의 크기를 최소화하는 특별한 꼭지점 속성 형식조차 있습니다 (GL_INT_2_10_10_10_REV이 가장 두드러집니다). 그러니 그 일을 올바르게하십시오.

관련 문제