如何在Z轴上模拟2D精灵的移动?

4
我会准确阐述我的问题,我有一个在二维世界(X,Y)中移动的二维物体,并且我想在Z轴上伪造一个运动。因此,我认为最好的方法是稍微调整其范围(宽度、高度)和位置。 但是,如何确定一个大小为(w,h)并从相机向前移动1米(Z轴)的对象的新范围方程式是什么?这种函数的参数是什么?
感谢您的帮助。

让精灵变大或变小?如果您正在使用2D等距视图,则还需要曲线移动。 - BlueRaja - Danny Pflughoeft
3个回答

6

使用投影将对象的真实 (X,Y,Z) 坐标存储,并通过相机 K 个单位以上的平面进行显示,通过二维投影 (K*X/(Z+K),K*Y/(Z+K)),其中+Z 远离相机。

要更改高度和宽度,请遵循类似的模式,使用 (DX,DY) 精灵的真实大小和 (K*DX/(Z+K),K*DY/(Z+K)) 表现(绘制)大小。

要正确执行此操作,您可以遵循此 FlipCode 文章中的建议。


2
主要参数将是相机距离和光圈角度。
通过公式new_size = size / distance可以简单地确定新的大小。 请注意,没有距离的物体将具有无限大小。 为了获得光圈角度的效果,您需要包括另一个因素fnew_size = f * size / distance 其中f是单位尺寸的距离。 单位尺寸的距离是图像以其原始大小绘制的距离。 当然,这个距离也不能为零。通过这个距离,您隐含地定义了光圈角度。
当我谈论尺寸时,我指的是宽度和高度,因此该公式适用于两者。
希望您能够理解我的解释。

是的,我明白你的意思,谢谢你的回答。 你认为“单位尺寸的距离”可以通过某种方式计算吗?比如利用相机的特性(视场角、比例)等。 - Silouane
你可以通过以下方式进一步改进:new_size = f * size / (f + distance)。这样,在距离0处的大小将为1,在距离f处的大小将是原始大小的一半,以此类推... - tehvan
这会偏移距离并将“零点”移动到相机后面。 - Nobody moving away from SE
但是没有人说:“单位尺寸的距离是图像绘制在其原始大小处的距离”。 这意味着在距离f处,新尺寸应为原始尺寸,因此我们有f * size / f + f = size / 2,但它不是原始大小。 - Silouane
在@tehvan的提议中,原始大小点是零距离。他稍微移动了f的含义,但这取决于你想要什么。我认为他的公式可能更直观易懂。 - Nobody moving away from SE

0

宽度和高度将与观察者的距离成反比。如果它们距离观察者的距离是原来的两倍,那么大小将减半。因此,如果您与观察者的“自然”距离为A,而新位置在A+Z处,则需要将原始宽度和高度乘以A/(A+Z)。这也适用于小的负Z值(物体更靠近观察者,看起来更大)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接