【问题标题】:How do I calculate Z position of the eye point at lookAt?如何在lookAt计算眼点的Z位置?
【发布时间】:2013-05-26 11:18:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: opengl-es perspectivecamera


    【解决方案1】:

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

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

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

    【讨论】:

    • 最后一句话有点太粗了:这是最大的投影,没有像素比原始投影更大。
    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多