2013-07-25 4 views
0

세계의 특정 지점이 쿼드/평면에 있는지 테스트하고 싶습니다. 쿼드/플레인은 어떤 값으로도 변환/회전/크기 조정이 가능하지만 주어진 포인트가 있는지 여부를 감지 할 수 있어야합니다. 쿼드가 회전/스케일/변환이 적용되지 않은 경우 포인트가 있어야하는 위치를 가져와야합니다.원근 투영에서 점이 쿼드 안에 있는지 확인하는 방법은 무엇입니까?

예를 들어, 크기가 100x100 인 0, 0, 0의 쿼드를 고려해 볼 때 z 축을 따라 45도 각도로 회전합니다. 세계에서 마우스 위치가 (x, y, 0) 인 경우, 그 점이 현재 변환에서 해당 쿼드에 속하는지 알아야합니다. 그렇다면 쿼드에 변환이 적용되지 않았는지, 즉 그 점이 어디에 있었는지를 알아야합니다. 모든 코드 샘플은 큰 도움이

+2

저는 이것이 XY 문제라고 생각합니다. 내 말은, 물론 당신은 * inverse * -transform 당신의 포인트를 변환 한 다음 일반 평면 계산을 사용할 수 있습니다. 그러나 만약 당신이 picking (많이 닮은 것처럼 보입니다)을 구현한다면, 그것을 진술하면 답이 그것에 대해 조정할 수 있습니다. 지금은 너무 광범위합니다. –

+0

"크기가 100x100 인 0, 0, 0의 쿼드를 고려하십시오. 그게 사양입니다. 당신은 실제로 사변형을 의미합니까, 아니면 직사각형을 의미 했습니까 (너비 x 높이로 완전히 지정 되었습니까?)? 이것은 해답에 큰 차이를 만듭니다. @MSalters가이 기능을 수행합니까? – MSalters

+0

임의의 사변형에 대한 계산은 앞서 언급 한 테셀레이션 만 필요합니다 (어쨌든 렌더링을 위해 수행해야 함). –

답변

1

레이 캐스팅 방법이 될 것입니다 아마 간단합니다 :

  1. 사용 gluUnProject()은 광선의 세계 공간 방향이 장면에 캐스팅 얻을. 광선의 원점은 카메라 위치입니다.
  2. 이 광선을 사각형의 변환의 역함수로 변환하여 오브젝트 공간에 놓습니다. 광선의 원점과 방향 벡터를 모두 변환해야합니다.
  3. 표준 광선 - 평면 교차 테스트를 사용하여이 광선과 XY 평면 사이의 교차점을 계산합니다.
  4. 교차점의 x 및 y 값이 사각형 범위 내에 있는지 확인하십시오. 원하는 경우 교차점의 x 및 y 값이 사각형 경계 내에 있는지 확인하십시오.

GLM가 여기에 관련된 수학의 일부에 대한 자신이없는 경우에 매우 도움이 될 것 같은 수학 라이브러리는 행렬을 반전하고 다른 모든 변환을 수행하는 등 glm::unProject()뿐만 아니라 기능과 같은 대응하는 기능을 가지고있다 너는 필요할거야.

관련 문제