2011-03-17 3 views
0

위치와 방향으로 정의 된 카메라와 그 중심과 범위로 정의 된 상자가 있다고 가정합니다 (상자 중심에서면 중심까지의 세 직교 벡터). 얼굴은 카메라의 바깥 쪽면이 카메라를 향하고 있고 안쪽면이 안쪽면을 보았을 때 보이지 않습니다.박스 후면 컬링

상자의 위치와 방향에 따라 상자의 1-3면이 보일 수도 있습니다. 어떤 얼굴이 보이는지 확인하는 방법이 있습니까? 분명한 해결책은 각 얼굴에 대한 얼굴 카메라 벡터에 대해 얼굴 법선의 6 개 내적을 계산하는 것입니다. 더 좋은 방법이 있습니까?

참고 : 원근 투영이 사용되지만 문제가 아니라고 생각합니다. "대향 카메라"의 특성이 투영과 독립적으로 보입니다.

답변

2

내가 설명한 방법이 이것을 수행하는 일반적인 방법이라고 생각합니다. 매우 빠른 계산이므로 속도에 대해 너무 걱정하지 않아야합니다. 이것은 레이 - 삼각 교차 알고리즘의 계산 횟수를 줄이는 데 사용하는 것과 같은 방법입니다. 얼굴의 정면이 보이지 않으면이 방법은 그 얼굴에 대한 계산을 계속하지 않습니다. 이 알고리즘의 C++ 구현에 대해서는이 백서를 참조하십시오. 그것은 계산의 전반부에 있습니다. http://jgt.akpeters.com/papers/MollerTrumbore97/code.html

2

유일한 영리함은 입방체의 얼굴이 보이면 반대쪽 얼굴이 분명히 없다는 것입니다. 적어도 정기적 인 투시 투영에서.

반대의 경우는 사실이 아닙니다. 얼굴이 보이지 않으면 반대쪽 얼굴이 보이지 않을 수도 있습니다. 이것은 투영의 유형이 중요하기 때문입니다. 큐브가 실제로 한면을 똑바로보고있는 카메라 가까이에 있다고 상상해보십시오. 그런 다음 큐브를 약간 회전 시키면 평행 투영으로 다른면이 즉시 보일 수 있지만 원근 투영에서는 이것이 발생하지 않습니다.

+0

감사합니다. 이제는 프로젝션에 대해 잘못 생각했습니다. 평행 투영을 사용하면 컬이 조금 더 쉬워지고, 투영 방향이 투영 방향과 반대가 될 수 있으므로 각면의 옵셋을 계산할 필요가 없습니다. – Suma

+0

@Suma 카메라가 항상 (0,0,0)에 있고 한 축이 정면을 향하고 있다면 (일반적으로 Z 축의 양 끝쪽을 향함) 많은 계산이 더 쉬워집니다. 예를 들어 카메라 - 얼굴 벡터는 단순히 얼굴에있는 점의 좌표입니다. – biziclop

관련 문제