그래서 적용된 텍스처 중 일부가 알파 채널을 가지고있을 때 OpenGL에서 3D 모델을 렌더링하는 가장 좋은 방법을 찾으려고합니다.OpenGL에서 알파가있는 텍스처로 3D 모델 렌더링
깊이 버퍼를 사용하도록 설정하고 3D 모델에서 모든 삼각형을 그리기 시작하면 모델의 다른 삼각형 앞에있는 삼각형을 그려야 만 삼각형을 얻을 수 있습니다. 그것에. 문제는 앞쪽 삼각형이 알파 투명도를 가지며 그 뒤에있는 삼각형까지 보일 수 있어야하지만 뒤에있는 삼각형은 여전히 렌더링되지 않습니다.
깊이 버퍼를 비활성화하면 문제가 해결되지만 삼각형이 불투명 한 경우 렌더링 된 후에도 삼각형이 뒤쪽에 렌더링됩니다.
예를 들어, 기본적으로 투명한 기저부가있는 서로 꼭대기에 쌓인 일부 원뿔 모양의 소나무를 렌더링하려고합니다. 당신은 여전히 투명 삼각형의 윤곽을 볼 수있는 방법을 볼 수 있습니다
: 다음 그림은 깊이 버퍼를 사용할 때 발생하는 문제를 보여줍니다.
다음 그림은 깊이 버퍼가 비활성화되었을 때의 모습입니다. 여기
당신이 나무의 뒷면에있는 삼각형의 일부는 나무의 나머지 앞에 렌더링되는 방법을 확인할 수 있습니다.
이 문제를 해결하고 소나무를 올바르게 렌더링하는 방법에 대한 아이디어가 있으십니까?
P. 모든 것을 렌더링하기 위해 셰이더를 사용하고 있습니다.
... 알파 테스트 (예 : ES 2.0 또는 WebGL)가 지원되지 않는 환경에서 alpha가 원하는 임계 값보다 작 으면 조각 쉐이더에서'discard '를 사용하십시오. – Tommy
셰이더가있을 때 (바탕 화면 OpenGL에서) 작동합니다. [Core OpenGL 3.1 이상] (http://www.opengl.org/wiki/Core_And_Compatibility_in_Contexts)을 사용할 때 알파 테스트가 작동하지 않습니다. –
@Tim 그래서 discard를 사용해 보았는데, fragment shader가 수행 한 색상 변경을 제거하는 것처럼 보입니다. 그러나 깊이 버퍼에 전혀 영향을 미치지 않는 것 같습니다. discard를 사용할 때 깊이 버퍼가 활성화 된 그림과 같은 결과를 얻습니다. – Jeremy