2013-08-16 18 views
2

사용자가 한 장면에서 3D 개체를 선택할 수있는 프로젝트를 진행하고 있으며 모든 사람들이이 특정 시나리오에 접근하는 가장 좋은 방법이라고 생각하는 것이 궁금합니다.3D 그래픽 피킹 -이 시나리오에 가장 적합한 방법은 무엇입니까

기본적으로 우리는 적어도 100 개의 객체 (최소 폴리곤이지만 ~ 12-15 개의 삼각형으로 만들어 짐)와 약 1000-2000 개의 객체가있는 장면을 가지고 있습니다.

일부 개체가 다른 개체를 가릴 수 있으므로 "피커 블"개체가 아마도 장면의 복잡도에 따라 800-1500 사이의 범위에있을 수 있기 때문에 모든 개체가 항상 "선택 가능"하지는 않습니다.

개체를 "선택"할 때 어떤 식 으로든 강조 표시하기를 원한다면 다르게 렌더링한다는 것을 의미합니다. 이것은 사소한 것이지만 한 번의 클릭뿐만 아니라 끌기에서도 수행해야합니다. 짧은 시간 내에 피킹 알고리즘을 많이 실행할 수 있습니다. 이상적으로 사용자는 "끌기"작업을 수행하는 동안 강조 표시된 객체를 볼 수 있습니다. 즉, 기본 렌더링보다 지연되지 않도록 비동기 적으로 수행해야합니다.

나는 간단한 광선 추적 선택을 시도했지만 이것은 장면에서 모든 삼각형을 반복하면서 객체를 찾는데 분명히 느리다.

또한 GPU 기반 따기를 시도 -하지만, 드래그 조작으로이 여러 렌더와 GPU 간 CPU 데이터 전송 위대한하지 않는 것을 의미 각 개체에 고유 한 색상을 제공하는 pixelbuffer를 사용하여 장면을 렌더링 공연.

내가 원하는 성능과 기능을 시도해 볼 수있는 다른 가능성이 있습니까?

감사합니다.

+0

Octree 접근법 이외에도 먼저 더 간단한 경계 용적을 테스트해야합니다. 예 : 구형 - ray 교차에 대한 테스트는 매우 저렴합니다. 광선이 경계 볼륨에 부딪치지 않으면 광선이 메시에 닿는 경우 시도 할 필요가 없습니다. –

+0

그래서 여러분은 구의 상자뿐만 아니라 구의 팔각형을 만들고 먼저 구를 테스트하는 것이 유익 할 것이라고 말하고 있습니까? – poncho

+0

아니요, 옥트리 나무에서 잠재적 인 히트 곡을 발견하면 실제 히트 곡이 있는지 분석해야합니다. 경계 볼륨을 먼저 확인하여 가속화 할 수 있습니다. –

답변

1

나는 이런 종류의 일을하기 전에 Octree을 사용했고, 그것은 내 최선의 선택 인 것처럼 보였다. 모든 객체는 해당 노드에 배치하고 일반적인 Octree 프로토콜을 통해 테스트 할 수 있습니다. 실제 이점은 현재 노드가 비어있는 경우 레이브 캐스트를 공간 노드의 끝으로 상쇄하는 것입니다. 이것은 분명히 당신에게 무차별 대폭 강화 된 이득을 줄 것입니다.

다음 링크는 당신에게있는 기반을 제공한다 옥트리의과 설정 방법 : Introduction to Octrees

링크는 당신에게베이스의 경우, 옥트리의 사용을주고 있지만가 단순히 필요한 수표를 줄이기 때문에 질문에 따라 판단하면 실제 따기를 수행하는 데 필요한 지식을 이미 갖고있는 것처럼 보입니다.

+0

아 좋아, 나는이 방법을 발견했다고 생각지 않는다. 당신이 어딘가에 링크를 멋지게 설명해 주는가? – poncho

+0

@poncho 정확하게 제공하는 링크를 찾을 수 없지만 전에 octree를 사용 해본 적이 있습니까? 그렇지 않다면 일단 익숙해지면 수행하는 교차 테스트의 범위를 좁힐 수 있습니다.추가 최적화를 수행하려면 빈 노드를 지나서 광선을 "가속화"할 수 있습니다. 그 이유는 거기에서 테스트를 수행 할 필요가 없다는 것을 알고 있기 때문입니다. –

+0

아, 고맙습니다. 아니, 전에 Octrees를 사용한 적이 없지만 여기서는 아주 좋은 설명을 발견했습니다. (http://castle-engine.sourceforge.net/vrml_engine_doc/output/xsl/html/chapter.octree.html#section. octree_collision_detection) 이제 구현할 차례입니다. – poncho