2012-07-05 3 views
7

안드로이드 장치 (OpenGL ES 2.0)의 깊이 버퍼에 쓰기가 필요합니다. gl_FragDepth은 OGL ES 2.0에서 쓸 수 없으므로 해결 방법을 찾아야합니다. 사실, 레이캐스팅을 통해 구체를 렌더링하고 싶습니다. http://www.sunsetlakesoftware.com/2011/05/08/enhancing-molecules-using-opengl-es-20. 그러나이 웹 사이트에서 설명한 솔루션 (glBlendEquation을 사용하여 깊이를 작성하는 오프 스크린 렌더링 패스)은 GL_MIN_EXT- 블렌딩이 지원되지 않기 때문에 Android가 아닌 Apple 장치에서만 작동합니다. 내 Tegra3 태블릿에OpenGL ES 2.0에서 깊이 버퍼/깊이 값을 쓰기위한 해결 방법

나는이 방법을 구현 할 수 있었다 : Android GLES20.glBlendEquation not working? (BTW, 내가 선형화 된 깊이 값을 사용하는 것이 좋습니다을, 그들은 더 나은 결과를 얻을!) 그것은 꽤 좋은 작동하지만, 물론이 엔비디아의 GPU에서만 사용할 수 있습니다.

이론적으로 확장자는 GL_EXT_frag_depth이며 (Can an OpenGL ES fragment shader change the depth value of a fragment? 참조) Android 기기에서도 사용할 수 없습니다.

마지막으로, (오프 스크린 렌더 패스에서) 단 하나의 구에 대한 깊이 버퍼를 작성한 다음 두 번째 렌더 패스에 다음 구의 깊이 버퍼를 쓰고 세 번째 렌더 패스에서 두 개의 버퍼를 결합 할 수 있습니다. 그렇게하면 n 개의 구체에 대해 2 * n + 1 렌더링 패스가 생깁니다. 이것은 비효율적입니다!

아이디어가 부족하기 때문에 제 질문은 다음과 같습니다. OpenGL ES 2.0 안드로이드 장치에 깊이 버퍼를 작성하는 일반적인 방법/해결 방법이 있습니까?

답변

2

글쎄, 여기 옵션이 부족한 것 같습니다. OpenGL ES soooo에 대해서는 잘 모르기 때문에 더 이상의 해결 방법에 대해서는 알지 못합니다. 내 마음에 와서

있는 유일한 방법은 몇 가지 전처리와 무차별 멀티 패스 접근 방식을 결합하는 것 :

정렬 원자는 서로 중복되지 않은 그룹으로 당신의 분야입니다. 10 개 미만의 그룹에서 단백질의 모든 구체를 분류 할 수 있어야합니다. 그런 다음 각 그룹의 모든 구체를 한 번에 렌더링하십시오. 구가 겹치지 않기 때문에 정점 깊이가 충분합니다. 그런 다음 결과를 "깊이 혼합"할 수 있습니다.

문제가 될 수있는 몇 가지 사전 처리가 필요합니다.

+0

이것은 흥미로운 옵션처럼 들립니다. 내가 기대했던 것만 큼 우아한 해결책은 아니지만, 다른 어떤 것도 없을 것 같다. 아마도 나는 그것을 시도 할 것이다. 심도 정렬은 대부분의 단백질과 다른 작은 분자에 대해 충분히 빠릅니다. – kroneml

관련 문제