2013-10-18 6 views
2

많은 수의 간단한 개체가있는 3D 장면이 있으므로 마우스를 사용하여 개체를 가져 오는 데 광선 추적을 사용하는 것이 좋지 않다고 생각합니다.오프 스크린 렌더링을 사용한 마우스 피킹?

나는 같은 것을 할 싶습니다

  1. 이 같은 렌더링 현재 객체 대신에 자신의 색

  2. 에 포인터를 사용하는 일부 OpenGL은 오프 스크린 버퍼에 모든 객체를 렌더링 장면을 실제 색상을 사용하여 화면에 표시

  3. 사용자가 (x, y) 화면 좌표로 점을 선택하면 해당 위치에서 오프 스크린 버퍼의 값을 가져 와서 객체에 대한 포인터가 있습니다

가능합니까? 그렇다면 "포인터로 그리기"를 위해 선택할 수있는 버퍼 유형은 무엇입니까?

+0

가 (많이) 이동 있습니까 (Google에서 주위를 둘러 경우도 많은이 있습니다)? 그렇지 않은 경우 데이터 구조를 사용하여 선택하는 대략적인 영역을 빠르게 찾을 수 있습니다. 이렇게하면 적은 성능으로 대용량의 개체를 처리 할 수 ​​있습니다. 또한 매 프레임마다 마우스 피킹을 사용하지 않으면 피킹을 쉽게 멀티 스레드하고 성능 문제를 거의 완전히 피할 수 있습니다. (사용자는 클릭과 선택 사이에 100ms 지연에 대해 신경 쓰지 않을 수도 있음) –

+0

레이 트레이싱과 레이 캐스팅 (성능 현명) 간에는 큰 차이가 있습니다. 이것은 레이 캐스팅의 응용 프로그램입니다. 광선이 여러 표면에서 반사되거나 다른 재질을 통과 할 때 광선을 "추적"하지 않습니다. 초기 광선 캐스팅을 가속화하고 (테스트 할 데이터 집합을 줄이기 위해) 공간 분할 데이터 구조를 사용하십시오 (기회는 이미 장면에서 이러한 데이터 구조를가집니다). . 픽셀 리드 백을 정말로하고 싶은 유일한 시간은 픽셀 완전 선택이 필요한 경우 많은 대기 시간을 추가하는 것입니다. –

답변

0

두 번에 걸쳐 렌더링 할 수 있다고 가정합니다. 먼저 버퍼링 또는 텍스처 데이터를 선택하고 두 번째 패스에서 데이터를 표시합니다. 저는 OGL에 익숙하지 않지만 DirectX에서는 http://www.two-kings.de/tutorials/dxgraphics/dxgraphics16.html과 같이 할 수 있습니다. 그런 다음 텍스처를 분석 할 수있는 방법을 찾을 수 있습니다. 데이터를 두 번 렌더링하므로 렌더링 시간이 두 배로 늘어나지는 않습니다 (모든 쉐이더 및 효과를 적용 할 필요가 없으므로) 싹이 커지면 상당히 늘어납니다. 또한 각 프레임마다 GPU에서 CPU로 적어도 2MB의 데이터 (2K 모니터에서 1 픽셀 당 1 바이트로 이동하는 경우)를 보낼 수 있지만 화면에 256 개 이상의 객체가있는 경우 변경 될 수 있습니다.

편집 : 여기 내가 튜토리얼이 올바른지 확인할 수 있지만 OGL과 동일한 기능을 수행하는 방법은 다음과 같습니다 http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-14-render-to-texture/

관련 문제