3

我画了一个矩形并将其与图像的纹理绑定。然后我做了一些旋转、过渡和缩放。它与正交投影完美配合。

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

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

4

1 回答 1

1

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

那么如果你取 eyeZ = max(f + zmin, f/aspect + zmin)

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

于 2013-06-05T22:37:12.523 回答