如何在lookAt计算眼点的Z位置?

时间:2013-05-26 11:18:55

标签: opengl-es perspectivecamera

我画了一个矩形并用图像的纹理绑定它。然后我做了一些轮换,过渡和缩放。它与正交投影完美配合。

现在我正在尝试透视投影。

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 个答案:

答案 0 :(得分:1)

这是一个小信息,但是,如果你用模型矩阵变换矩形,取最小的z值(角落),并调用这个zmin。 取f为(20.0f *(M_PI / 180))/ 2的余切。(假设projectionMatr使用等效矩阵作为gluPerspective)

然后如果你采用eyeZ = max(f + zmin,f / aspect + zmin)

你的矩形最近点的投影应该是1:1(其余的更小),因此投影将是最大投影小于或等于原始矩形(如果以相同单位测量)。