2010-04-10 1 views
3

나는 작업을 위해 만든 OpenGL 기반 인터페이스 프로젝트에서 3D 계산을 관리하기 위해 CML을 사용하고 있습니다. 카메라를 나타내는 4x4 행렬의 일부로 유지되는 시점 점에서 주어진 거리에서 뷰잉 프러스 텀의 너비를 알아야합니다. 내 목표는 뷰포트의 겉보기 가장자리를 따라 GUI 오브젝트를 배치하는 것입니다. 그러나 가까운 클립핑면에서 화면으로 어느 정도 거리를두고 배치하십시오.가까운 평면에서 주어진 거리에있는 절두체의 너비

CML에는 절두체의 평면을 추출하여 Ax + By + Cz + D = 0 형식으로 다시 돌려주는 기능이 있습니다. 이 절두체는 카메라에 수직이며 반드시 투시 투영의 z 축과 정렬되어 있지 않습니다.

x 좌표와 z 좌표를 추출하여 그래픽 요소를 카메라와 다른 거리에서 화면 양쪽에 고정 할 수 있습니다. 그 일을하는 가장 좋은 방법은 무엇입니까?

감사합니다.

답변

2

이미 알고있는 너비의 횡단면이 정점에서부터 알려진 거리 인 경우이 값은 Finding side length of a cross-section of a pyramid frustum/truncated pyramid과 같습니다. 당신이 그걸 가지고 있지 않고 당신이 답을 스스로 도출하고자한다면 당신은이 단계들을 따를 수 있습니다.

  1. 두 개의 인접한 비행기를 타고 교차로 L1을 찾으십시오. 은 here 단계를 사용할 수 있습니다. 정말로 당신이 필요로하는 것은 라인의 방향입니다.
  2. 이전 단계에서와 동일한 과 같은 두 개 이상의 비행기를 가져 와서 교차로 L2를 찾으십시오.
  3. Ax + By + Cz + D = 0 형식의 모든 평면이 원점을 통과하므로 L1과 L2가 교차합니다. 이 교차합니다.
  4. L1 및 L2 방향 벡터의 그림을 그리며 원점에 꼬리를 그립니다. 이들은 각도를 형성합니다. 그걸 쎄타라고 부르세요. 두 벡터 사이에 각도 의 수식을 사용하여 theta 을 찾으십시오. here.
  5. 그 각도의 이등분선을 그립니다. a 이등분선에 수직선을 에 놓고 원점에서 원하는 거리 d를 지정합니다. 그러면 이등변 점 삼각형이 만들어지고 두 개의 직각 삼각형이 합쳐집니다. 수직의 길이는 이며 원하는 절두체 너비는 입니다. w는 직사각형 중 하나의 길이의 두 배인 직각 삼각형의 입니다.
  6. r을 우변 삼각형의 기울기 길이 인 의 길이라고합시다. 그러면 그렇게 황갈색 (세타/2) = 2D 승 을 의미/D (/ 2 W) */2 승 COS (세타/2) = D 및 R 죄 (세타/2) = r에 tan (theta/2). d 및 theta를 알고 있으므로 작업이 완료되었습니다.

절두체의 단면의 한 변의 길이를 알아 냈습니다. 이것은 모든 절두체의 수직 단면과 함께 작동합니다. 이것은 수직이 아닌 교차 단면에 적용하도록 확장 될 수 있습니다.

+0

나는 그 포스트가 조금 다르다는 점에서 그가 새로운 모든 절두체의 차원을 생각한다. 나는 파라 메트릭 형태를 가지고있다. 왼쪽, 오른쪽, 위쪽 및 아래쪽의 D 값이 있기 때문에 가까운 평면의 치수를 얻을 수 있지만 다른 횡단면을 얻는 방법을 알지 못했습니다. 주된 문제는 파라 메트릭 형태로 무엇을해야 하는지를 정말로 이해하지 못한다는 것입니다. 그러나 FOV 각도와 카메라까지의 거리를 알고 있으므로 실제로 필요한 것은 모두 6면입니다. – joshfisher