如何修复透视投影失真?

时间:2016-01-06 05:23:14

标签: opengl matrix graphics perspectivecamera metal

我是图形编程的新手。我没有足够的意志坐下来磨练任何长篇OpenGL教程,但是当Apple发布Metal时我真的很兴奋,而且我已经走了很长一段路。我理解所有矩阵数学背后的推理(当然不是它们是如何推导出来的)但我对我的预测有困难。使用正交投影矩阵,没有深度,因此在这种情况下您可能会放弃3D图形。然而,虽然我的透视投影看起来效果很好,但当我将立方体从投影中心移开时,我发现了一些东西:

My cube, centered.

After shifting the cube's position.

现在我可能完全错了,但这种失真并不现实。也许在纹理化和更复杂之后它会有意义,但我不确定。在项目中,我有一个投影矩阵,一个世界视图矩阵和立方体的模型视图矩阵。矩阵按此顺序相乘:prMatrix * (wvMatrix * mvMatrix) * <vertex>。是否有某种方法可以保持物体的比例,无论它们在视锥体内的哪个位置?

1 个答案:

答案 0 :(得分:2)

正如reto koradi所提到的,视野参数非常重要。

如果您认为您的窗户是您正在观察的世界的物理窗口,并且您的眼睛是观察点,您可以想象金字塔。对于一个小窗口,如果距离监视器足够远,金字塔将非常尖锐:因此视野很小。我会说你可能会在90度或更高的视野下绘制,当你真正在20-30度的时候观看它(因为你的窗户不是全屏但是很小)。

如果你真的从近处看着你的窗户,那么就会出现明显的失真。