2011-10-05 5 views
3

OpenGL을 사용하여 일부 3D 오브젝트를 렌더링하려합니다. 요구 사항은 다른 투명한 객체 뒤에있는 모든 투명한 객체를 숨길 필요가 있다는 것입니다. 모든 삼각형은 단일 삼각형 버퍼에 있으며 한 번에 그려집니다. 약간의 빛을 던져주세요.OpenGL의 투명 오브젝트 렌더링

+0

개체가 투명하고 어떤 버전의 OpenGL을 처리하는지에 대해 의견을 말씀해 주실 수 있습니까? – masebase

+0

나는 opengl 1.1을 다루고있다. 예를 들어 유리문이있는 방 안에 유리 화병이있다. 사용자는 유리문을 통해 목조 가구처럼 방 안의 불투명 한 물체 만 볼 수 있지만 실내의 유리 화병은 볼 수 없어야합니다. – user942502

답변

3

장면을 정렬하여이 작업을 수행 할 수 있습니다. 이는 올바르게 작동하는 투명성을 얻으려면 어쨌든해야 할 일입니다. 기록 및 테스트

    1. 하는 Z 버퍼를 사용하는 모든 불투명 오브젝트
    2. 렌더링 앞 뒷면에 모두 투명한 오브젝트를 렌더링 :

      다음은해야 할 일입니다. z 버퍼는 투명 오브젝트가 다른 투명 오브젝트 뒤에 표시되지 않도록합니다. glDepthMask를 사용

  • +0

    답장을 보내 주셔서 감사합니다. 네, 투명 삼각형 (앞에서 뒤로)을 정렬하여이 작업을 수행 할 수 있습니다. 투명 오브젝트의 모든 삼각형은 한 번에 그려집니다. 장면을 회전하면 효과가 유지됩니다. 불행하게도 장면에서 50 만 개의 삼각형을 다루기 때문에 정렬 작업은 허용되지 않습니다. 내가 blendfunction의 일부 combimation을 사용하여 이것을 달성 할 수 있다고 생각합니까? – user942502

    +0

    적어도 이것이 OpenGL 1.1 기능으로는 가능한지 확신 할 수 없습니다. 2 개의 버퍼로 분할 할 수 있습니까? – geofftnz

    +0

    어떤 삼각형이 화병을 형성하고 어떤 삼각형이 내 삼각형 버퍼의 문을 형성하는지에 대한 분류가 없으므로 2 개의 버퍼로 분할 할 수 없습니다. – user942502

    5

    시도() :

    //Render all opaque objects 
        glDepthMask(false); //disable z-testing 
        //Render all transparent objects* 
        glDepthMask(true); //enable z-testing (for the next frame) 
    

    * 기술적으로, 당신은 다시 전면에서 투명한 오브젝트를 렌더링해야하지만 그렇게하지 않으면이 거의 눈에 띈다.