如何在不改变物体的比例或偏移的情况下进行透视投影“视差”?

时间:2013-01-28 11:59:51

标签: opengl directx projection parallax perspective

问题: 我正在制作一个具有视差效果的2D游戏,但我正在使用3d空间,所以我不是在模拟视差,而是让透视投影为我照顾它。现在问题是我有我自己的游戏编辑器,我设计水平,在这个编辑器中我只使用图像,我为每一层设置一个Z值。但是我希望图层在游戏引擎中完全按照我在游戏编辑器中设置的方式显示,简而言之,我希望透视投影能够进行视差,但不会改变它们的比例或偏移/位置。

显而易见的解决方案是将它们放大并抵消它们,但问题是如何计算它们的偏移? 使用缩放我尝试了对象 - >缩放(object.Z / view.Z)并且似乎将它们返回到它们的实际大小但它们的位置仍然是错误的。 我尝试了object-> setPositionX(object-> getPosition()。x *(object.Z / view.Z))并且似乎是对齐的,除了它们似乎都被移位了。

我尝试过unprojecting并试图从世界矩阵转换为屏幕矩阵并找到一些比率等等。

如何以优雅/数学方式完成这项工作?

1 个答案:

答案 0 :(得分:0)

透视投影将始终缩放几何体,如果不是,则不是透视。如果将投影设置为更远的正交和滚动几何图形,则可以轻松地模拟视差。
我不知道你正在制作什么样的游戏,但是为了这个例子,让我们说这是一个马里奥克隆。按右箭头键时,马里奥向右移动X量,相机以相同的速度移动。您可以让所有不属于直接水平网格的几何体(与马里奥相同的“层”)滚动X * object.z数量(您可能需要调整该值)以使对象更接近滚动速度和对象更快滚动。