如何修复透视投影失真?
How to fix perspective projection distortion?
我是图形编程新手。我从来没有意志力坐下来仔细研究任何冗长的 OpenGL 教程,但当 Apple 发布 Metal 时我真的很兴奋,从那以后我已经走了很长一段路。我理解所有矩阵数学背后的推理(当然不是它们的推导方式),但我的预测有困难。使用正交投影矩阵,没有深度,因此在这种情况下您最好放弃 3D 图形。然而,虽然我的透视投影一开始看起来效果很好,但当我将立方体从投影中心移开时,我注意到了一些事情:
现在我可能完全错了,但那种扭曲感觉并不真实。也许在纹理化和更复杂之后它会有意义,但我不确定。在项目中,我有一个投影矩阵、一个世界视图矩阵和立方体的模型视图矩阵。矩阵按以下顺序相乘:prMatrix * (wvMatrix * mvMatrix) * <vertex>
。有没有什么方法可以保持对象的比例,无论它们在视锥体中的什么位置?
正如reto koradi所说,视野参数非常重要。
如果您将您的 window 视为您正在观看的世界的物理 window,并且您的眼睛是观察点,您可以想象金字塔。对于小 window,如果你离显示器足够远,金字塔会非常尖:因此视野很小。我想说的是,当您真正以 20-30 度的角度观看时,您可能会以 90 度或更大的视野进行绘制(因为您的 window 不是全屏而是很小)。
这会导致明显的失真,如果您真正近距离观察您的 window,则需要这样才能看起来正确。
我是图形编程新手。我从来没有意志力坐下来仔细研究任何冗长的 OpenGL 教程,但当 Apple 发布 Metal 时我真的很兴奋,从那以后我已经走了很长一段路。我理解所有矩阵数学背后的推理(当然不是它们的推导方式),但我的预测有困难。使用正交投影矩阵,没有深度,因此在这种情况下您最好放弃 3D 图形。然而,虽然我的透视投影一开始看起来效果很好,但当我将立方体从投影中心移开时,我注意到了一些事情:
现在我可能完全错了,但那种扭曲感觉并不真实。也许在纹理化和更复杂之后它会有意义,但我不确定。在项目中,我有一个投影矩阵、一个世界视图矩阵和立方体的模型视图矩阵。矩阵按以下顺序相乘:prMatrix * (wvMatrix * mvMatrix) * <vertex>
。有没有什么方法可以保持对象的比例,无论它们在视锥体中的什么位置?
正如reto koradi所说,视野参数非常重要。
如果您将您的 window 视为您正在观看的世界的物理 window,并且您的眼睛是观察点,您可以想象金字塔。对于小 window,如果你离显示器足够远,金字塔会非常尖:因此视野很小。我想说的是,当您真正以 20-30 度的角度观看时,您可能会以 90 度或更大的视野进行绘制(因为您的 window 不是全屏而是很小)。
这会导致明显的失真,如果您真正近距离观察您的 window,则需要这样才能看起来正确。