2011-04-27 2 views
6

3D로 그래픽으로 데이터를 수정할 수있는 WPF 프로그램을 만들고 있습니다. 사용자에게 동시에 여러 그래픽 객체를 선택할 수있는 옵션을 제공하기 위해 선택 사각형을 구현하고 싶습니다. (Windows 탐색기에서와 같이)이 프로그램과 같은 일반적인 기능은 선택 사각형에 대해 두 가지 다른 기능을 갖는 것이며 사용자가 어떻게 사용해야하는지 선택할 수 있습니다.WPF : 부분적으로 2D 사각형 안에있는 3D 비주얼 찾기

  1. 사각형의 일부 또는 전부 안에있는 개체가 선택됩니다.
  2. 사각형 안에 완전히 들어있는 개체 만 선택됩니다.

두 번째 방법은 각 객체의 경계 상자를 사용하여 직선적으로 진행하고 사각형 내부에 있는지 확인합니다. 다른 한편으로는 제 1의 것은 꽤 약간의 작업 인 것처럼 보인다. 내 모든 그래픽 객체는 복잡한 3D 그림이며 어떤 방식 으로든 사용자가 회전 할 수 있습니다. 현재 어떤 물체의 메쉬에있는 삼각형 중 어느 하나가 2D 사각형을 가로 지르는 지 확인하는 것 외에는 다른 방법을 찾을 수 없으며 시간이 많이 걸릴 수 있습니다.

WPF 3D에 대한 경험이 거의 없지만 이전에 OpenGL에서이 작업을 수행했습니다. 그런 다음 OpenGL에 특정 영역의 화면을 그리고 특정 영역에서 볼 수있는 객체 목록을 수집하도록 지시 할 수 있습니다. 내가 원했던 기능을 얻으려면 코드 줄이 약 5 줄 필요했습니다. WPF 3D로 할 수있는 방법은, OpenGL의 접근 방식과 유사 있습니까

  1. :

    내 질문이 추측?

  2. 그렇지 않으면 2D 사각형 뒤에 부분적으로있는 뷰포트에서 모든 개체 (Visual3D)를 찾는 다른 스마트 방법이 있습니까?

저는 이런 종류의 문제가있는 유일한 사람이라고 믿기를 거부합니다. 따라서 영리한 마음으로 올바른 방향으로 나를 안내 할 수 있기를 바랍니다.

감사합니다, Sverre


는 답변 주셔서 감사합니다!

2D 직사각형은 카메라 바로 앞에 있으며 앞으로 무한대로 확장됩니다. 나는 그 절두체 안에 부분적으로 또는 완전히 존재하는 어떤 물건을 얻고 싶다.

우리가 사용하고있는 카메라는 정사영 또는 원근 투영 카메라입니다 (System.Windows.Media.Media3D.ProjectionCamera). 매트릭스 카메라를 사용하지 않는 이유는 매트릭스 카메라를 지원하지 않는 타사 도구를 사용하고 있기 때문입니다. 그러나 프로젝션 카메라에서도 매트릭스를 얻을 수있는 방법이 있다는 것은 확실합니다. 그래서 문제가되지는 않을 것입니다.

이론적으로 솔루션은 우리가 필요로하는 것처럼 들리지만 진행 방법은 확실하지 않습니다. 샘플 코드에 대한 링크가 있습니까? 아니면 실제로 이것을 구현하는 방법에 대한 힌트를 더 줄 수 있습니까?

Btw : 우리는 WPF로 작업하고 있으므로 DirectX에 직접 액세스 할 수 없습니다. 적어도 그것은 우리가 약간의 연구 끝에 결론을 내린 것입니다. 우리는 WPF를 통해 액세스 할 수 없었던 z 버퍼의 사용을 언급합니다. z 버퍼에 액세스하는 방법을 알고 있다면 크게 감사하겠습니다!이것은의 주제이지만, 우리는 약간의 시간에 대한 z 버퍼를 사용하지 않도록하기 위해 노력했지만 ...

안부, Sverre을 포기

답변

0

A '스마트'방법은 Camera's matrix

를 사용하여 상자에 사각형을 변환 그리고 모든 개체와 상자의 교차점을하는 것입니다.

1

는에 기반 2D 사각형 또는 절두체는 교차 지역인가 2 차원 직사각형과 무한히 앞으로 확장 (또는 어쩌면 일부 클리핑 한도)? 뷰잉 절두체로 해석 될 수 있다면 그래픽 시스템의 기존 기능을 활용하여 원래 사각형에 해당하는 카메라 뷰 및 투영법을 사용하여 장면을 렌더링 할 수 있으며 모든 조명 및 음영이 비활성화되고 ' 태그 '를 사용하여 장면의 다른 객체를 찾습니다. 즉, 그래픽 하드웨어를 사용하여 클리핑/투영을 '렌더링'작업으로 수행 한 다음 픽셀 값을 '태그'로 열거하여 사각형보기에있는 객체를 결정할 수 있습니다.

선택을 실제 2D 슬라이스 (또는 매우 얕은 절두체)로 제한해야하는 경우 Z- 버퍼 (액세스 할 수있는 경우)를 사용하여 Z 범위 밖에있는 태그가있는 픽셀을 제외 할 수 있습니다. 원하는 선택 절두체.

이 접근법에 대한 좋은 점은 카메라 매트릭스 (이미 선택되어있는 창과 동일한 행렬)를 가지고 있고 프로젝션 매트릭스를보기 윈도우의 하위 세트로 변경하기 만하면된다는 것입니다.