2011-01-09 2 views
1

OpenGL에 대한 NeHe 튜토리얼을 진행하고 있습니다 ... 나는 수업 8 (블렌딩을 통해 큐브 그리기)에 있습니다. 나는 변경 http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=08초보자 투명도/openGL의 불투명도

나는

... 실험하고 항상 불투명 한에 반투명 얼굴 반대가되도록 불투명로 얼굴의 절반을 변경하고 큐브를 회전 할 수 있기를 원 코드 약간은 전체 소스가있다 : http://pastebin.com/uzfSk2wB 내가 몇 가지 변경 :

  • 는 기본적으로 혼합 사용하고 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)에 혼합 기능을 설정을;
  • 은 각면의면과 색상 그리기 순서를 변경했습니다.
    • 나는
    • 나는 모든 불투명 얼굴을 그릴
    • 내가 깊이 테스트를 해제
    • 내가 열심히 모든 투명면 이제

을 추첨 정확히 알려 깊이 테스트를 설정 무엇이 잘못 되었는가? 분명히 옳지 않은가? 나는 투명한 얼굴에 비해 어떤 얼굴이 불투명한지 알 수 없다. 때로는 얼굴이 그려야 할 때 그려지지 않는 것처럼 보인다. ...

뒷면과 비교하여 어떤 얼굴을 앞에 놓고 계산하는 것이 쉬운 일은 아니지만 (가능할지라도) 그렇게 할 필요가없는 방법이 있기를 바랍니다.

내 코드에서 무엇이 잘못되었거나 이것이 처음부터 올바른 방법이 아닌지 찾아보십시오.

+0

사진을 보여주세요. 또한 잘못된 것으로 보이는 부분을 설명하십시오. – Bahbar

+0

바로 지금 - 당신은 OpenGL의 매우 시대에 뒤진 비효율적 인 버전을 지금 배우고 있습니다. 당신이 그것을 원할 때 새로운 OpenGL 버전을위한 몇 가지 리소스를 찾아라. 최신 버전도 더 편리합니다! – Kos

답변

4

투명면을 그리기 전에 깊이 테스트를 비활성화하면 올바른 z- 순서와 상관없이 그려집니다. 투명한 얼굴이 다른 모든 얼굴 꼭대기에 그려져있는 것처럼 보입니다. 에 깊이 시험을 남겨 두십시오.

+1

불투명 한 지오메트리가 투명한 지오메트리를 폐색 할 수 있도록 실제로 깊이 테스트를해야합니다. 일반적으로 수행되는 작업은 glDepthMask (GL_FALSE)를 사용하여 'depth write'를 해제하여 투명 지오메트리 자체가 가리지 않도록하는 것입니다. 경우에 따라 큐브가 볼록이므로 아무 것도 변경하지 않습니다. – rotoglup

+1

블렌딩을 사용하면 볼록한 모양의 경우 페인터 알고리즘 http://en.wikipedia.org/wiki/Painter's_algorithm을 필연적으로 적용해야하기 때문에 투명한면을 맨 앞에 정렬 할 필요가 있습니다. : glEnable (GL_CULL_FACE); glCullFace (GL_FRONT); draw_cube_transparent_faces(); glCullFace (GL_BACK); draw_cube_transparent_faces(); - 적절한 심도 정렬을 구현하는 경우 심도있는 쓰기가 사용자에게 해를 미치지 않습니다. – datenwolf

+0

감사합니다. Rotoglup이 "겹쳐진"투명한 얼굴과 내가 잘못하고있는 몇 가지를 볼 수 있도록 추가 한 것을 추가해야했습니다. 이제는 잘 작동합니다 ... – Matthieu