2

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

明显的解决方案是将它们按比例放大并抵消它们,但问题是如何计算它们的偏移量?通过缩放,我尝试了 object->Scale(object.Z/view.Z) 并且似乎将它们恢复到实际大小,但它们的位置仍然是错误的。我尝试了 object->setPositionX(object->getPosition().x*(object.Z/view.Z)) 并且似乎是对齐的,除了它们似乎都发生了变化。

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

这怎么能以优雅/数学的方式完成?

4

1 回答 1

1

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

于 2013-01-28T12:32:44.310 回答