나는 OpenGL 2d 게임에서 절두체 컬링을 구현하려고합니다. 이 시점에서 내 게임의 기하학적 인 객체의 유일한 종류는 직사각형이므로이 방법이 매우 쉽다고 생각했지만 예기치 않은 결과가 나타납니다. 시야각이 45도이고 대칭 평면과 원거리 평면이 각각 0.01과 50 인 대칭 투시 투영을 설정했습니다. 시선 벡터는 항상 z 축과 평행이며 카메라는 x 및 y 축을 따라 이동할 수 있습니다.Frustum 컬링 직사각형 문제
내 생각은 내가 추려내려고하는 직사각형의 z 좌표에서 카메라에 현재 표시되어있는 세계 공간의 직사각형 영역을 가져 오는 것이었다. 카메라 절두체의 중심을보고 있기 때문에, 다음과 같이 I이 보이는 직사각형 영역의 가장자리까지의 거리를 계산한다
GLfloat maxDistance = givenRectangle.z * tanf(0.5 * (fovAngle * M_PI/180));
그때는 추가로 상기 x 및 y 좌표에서이 거리를 빼지 카메라는 최대 및 최소 가시 x 및 y를 얻은 다음 주어진 사각형을 테스트하여이 값들 사이에 있는지 확인합니다.
제 질문은 여기에 올바른 길을 가고 있는지, 그리고 위의 수식이 z = 5에 명확하게 표시되어야하는 객체를 가지고있을 때 어리석은 작은 값 (뭔가 * 10^-37)을 반환하는 이유는 무엇입니까? 카메라가 (0,0,0)입니까?
3D가 아닙니까? –
그래 기술적으로 나는 3d의 관점에서 2 차원 직사각형을 가지고 있습니다. 그래서 뭐든지 부르고 싶습니다. 내가 원근 투영을 원한다는 이유는 제가 확대 할 수 있기를 원한다는 것입니다. topdown 카메라 오리 엔테이션 – Jacob
그 부분을 제발 설명해 주시겠습니까 : 그럼 내가 추가하고 x와 y는 최대 및 최소 표시 x 및 y를 얻으려면 카메라의 x 및 y 좌표에서이 거리를 빼고 다음 볼 수있는 사각형을 테스트 이 값 사이에있는 경우 – jocelyn