2013-05-26 3 views
3

나는 직사각형을 그린 다음 이미지의 텍스처로 바인딩했습니다. 그런 다음 회전, 전환 및 크기 조정을 수행했습니다. 직교 투영과 완벽하게 작동합니다.lookAt에서 시점의 Z 위치를 어떻게 계산합니까?

이제 저는 투시 투영을 시도하고 있습니다.

mat4 model = mTranslate(shiftX(), shiftY(), 0.0f)*mRotate(rX, rY, rZ)*mScale(this->kx(), this->ky(), 0.0f); 
mat4 MVP = projectionMatr(20.0f * (M_PI/180), aspect, 0.1f, 10000.0f)*lookAt(0,0,eyeZ,0,0,0,0,1,0)*model; 

예를 들어, 내 이미지는 200 * 300 픽셀과 같습니다. 내 사각형이 iPad 화면에서 200 * 300 포인트를 초과하지 않도록하고 싶습니다. 그래서 올바르게 계산해야합니다 eyeZ

eyeZ 어떻게 계산합니까?

답변

1

이것은 약간의 정보이지만, 모델 행렬로 사각형을 변형하는 경우, (모서리에서) 최소 z 값을 가져 와서이 zmin을 호출하십시오. f를 (20.0f * (M_PI/180))/2의 코탄 탄젠트로 취합니다 (projectionMatr이 gluPerspective와 동등한 행렬을 사용한다고 가정)

그러면 eyeZ = max (f + zmin, f/aspect + zmin)

rectange의 가장 가까운 점의 투영은 1 : 1이어야하고 나머지는 더 작아야합니다. 따라서 동일한 단위로 측정 된 경우 투영법이 원래의 사각형보다 작거나 같은 가장 큰 투영법이됩니다.

+0

마지막 문장은 약간 지나치게 과장되었습니다. 픽셀이 원래보다 크게 투영되지 않는 최대 투사입니다. – Pruyque

관련 문제