2017-01-04 2 views
0

예를 들어, 두 개의 개체가 있고 (0,0,100)에서 (0,0,0)까지 볼 수 있습니다.OpenGL의 깊이 버퍼에 액세스 할 수있는 방법이 있습니까?

오브젝트 1 : 큐브 센터 (길이/너비/높이 10) Object2에 :

후 센터에서 구체 (반경 5), 나는 시야를 고려하지 않는이 번에 큐브를 (볼 수 있으며, 뷰 볼륨)

OpenGL은 창 중앙에 이라는 z 버퍼 알고리즘을 사용하기 때문에 처음에는 픽셀에 4 개의 심도 값이 있습니다. 깊이 90 (입방체의 표면), 깊이 (110 큐브이면) (구의) 깊이 95 및 105

첨가 : 다음 Z 버퍼 디스플레이 큐브의 색 (깊이 90 전면)

지금은 창 중앙에 픽셀에 저장된 값 4를 얻고 싶습니다. 그 값을 얻을 방법이 있습니까?

+0

죄송합니다. 난 이해가 안 돼요. 4는 어디에서 왔습니까? –

+3

동시에 4 개의 깊이 값이 존재하지 않습니다. 가장 앞에있는 것이 저장됩니다. 얼마나 많은 재정의 (overrides)는 조각이 처리되는 순서에 전적으로 달려 있습니다. – BDL

+0

또한, 다른 세계 또는 뷰 행렬을 사용하지 않고 원점 (0,0,0)에서 구를 그리는 경우 뒷면면 컬링을 켠 경우 모든면이 지적했다. –

답변

1

이것은 거꾸로 보입니다. 픽셀에는 깊이 값이 없습니다. 픽셀 색상은 장면의 객체 깊이, 상대 위치 및 방향, 카메라 설정에 따라 계산됩니다. 픽셀은 입력 데이터가 아니라 모든 결과입니다.

관심있는 지점에서 카메라 변환의 역행을 수행하여 장면의 "공간"에 선을 얻을 수 있습니다. 그런 다음 장면의 객체를 통해 그 선을 교차시킬 수 있습니다. 이 교차점은 픽셀 뒤에있는 객체의 Z 값입니다.

그러나 다시이 모든 것은 일반적인 기술보다 다소 뒤떨어져있는 것처럼 보입니다. 아마도 우리가 성취하려는 것을 알고 있다면 구체적인 해결책을 제안 할 수 있습니다. format 매개 변수로 GL_DEPTH_COMPONENT와 함께

void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * data);

:

0

은 다음과 OpenGL을 API를 사용합니다. 반환 값은 0과 1 사이이며 뷰잉 절두체를 기준으로 변환해야합니다. 4 개의 값을 동시에 가져올 수 없습니다. 개별 객체를 개별적으로 렌더링하고 필요한 다른 점을 읽을 수 있습니다.

관련 문제