2012-08-07 3 views
1

가 나는 결과를 결합하려는 두 가지 기능을 가지고있다. 주변 광과 방향 광을 모두 보여주고 싶지만 조금 문제가 있습니다. 나는 이것을 시도한다 :OpenGL에서 다중 패스로 조명을 어떻게 추가합니까? 단지 주변 광, 또는 단지 방향 빛 장면 그리기, 그들은 각각 개별적으로 잘 작동</p> <pre><code>drawAmbient drawDirectional </code></pre> <p>:

[self drawAmbient]; 

glEnable(GL_BLEND); 
glBlendEquation(GL_FUNC_ADD); 
glBlendFunc(GL_ONE, GL_ONE); 

[self drawDirectional]; 

glDisable(GL_BLEND); 

그러나 나는 단지 draw의 결과를 본다. 드로 호출 두 세트에 대해 같은 방법으로 깊이를 계산합니다. 나는 항상 텍스처로 렌더링하고 텍스처를 블렌드 할 수 있지만, 이는 중복되는 것처럼 보입니다. 기본 프레임 버퍼로 렌더링 할 때 조명을 함께 추가 할 수있는 방법이 있습니까?

+0

어떻게 조명을합니까? 이 경우 가장 많이 발생하는 것은 심도 테스트가 활성화되어 있고 두 번째 실행 조각이 모두 삭제된다는 것입니다. – KillianDS

+0

+1이 귀하의 의견이 나타날 때 입력 한 것입니다 :-) – Kos

+0

그러나 깊이 테스트를 사용하지 않으면 drawDirectional의 두 번째로 많이 그리는 호출에서 장면이 제대로 그려지지 않습니다. – Curyous

답변

3

두 경로 모두에서 깊이를 계산한다고 가정 해보십시오. 이것은 물론 정확 합니다만, 기본 깊이 비교 함수가 GL_LESS이기 때문에 깊이가 현재 깊이 버퍼에있는 것보다 결코 작지 않으므로 실제로 두 번째 패스에서 아무 것도 렌더링되지 않습니다.

그래서 두 번째 패스는

glDepthFunc(GL_EQUAL); 

에 깊이 테스트를 변경하기위한 다음 다시

glDepthFunc(GL_LESS); 

에 또는 당신은 또한 두 경우 모두를 포함하는 전체 런타임에 대한 GL_LEQUAL로 설정할 수 있습니다.

0

필자가 아는 한, 렌더 타겟을 분리하여 조명을 렌더링하여 결합해야합니다. 그래서 당신이 목표로 장면을 렌더링 할 것이다 :

  • 요약 확산 조명 조명없이

    • 질감
    • 요약 반사 조명 (모든 광원을 렌더링 부가 적으로 주변 색상으로 작성) (당신이 반사 구성 요소를 사용하는 경우)

    그런 다음 텍스처를 결합하십시오 (final_color = textured * diffuse + specular).

  • +0

    단순한 블렌딩만으로 개별 이미지를 추가하고 싶을 때 렌더링 타겟을 분리해야하는 이유는 무엇입니까? –