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

Math 如何模拟在Z轴上移动的2D精灵?,math,graphics,Math,Graphics,我将精确地回答我的问题,我有一个2D对象在2D世界(X,Y)中移动,我想模拟Z轴上的移动。所以我认为最好的办法是利用它的范围(宽度、高度)和位置。 但是,对于一个大小为(w,h)且从相机(Z轴)向前移动1米的物体,确定新范围的方程式是什么?这样一个函数的参数是什么 提前感谢您的帮助。主要参数是到相机的距离和光圈角度 通过new\u size=size/distance确定新尺寸很简单。 请注意,没有距离的对象将是无限大的。 要获得孔径角度的效果,您需要包括另一个系数f: new_size=f*尺

我将精确地回答我的问题,我有一个2D对象在2D世界(X,Y)中移动,我想模拟Z轴上的移动。所以我认为最好的办法是利用它的范围(宽度、高度)和位置。 但是,对于一个大小为(w,h)且从相机(Z轴)向前移动1米的物体,确定新范围的方程式是什么?这样一个函数的参数是什么


提前感谢您的帮助。

主要参数是到相机的距离和光圈角度

通过
new\u size=size/distance
确定新尺寸很简单。 请注意,没有距离的对象将是无限大的。 要获得孔径角度的效果,您需要包括另一个系数
f
new_size=f*尺寸/距离
其中
f
是单位尺寸的距离。 单位大小的距离是以原始大小绘制图像的距离。 当然,这也不能是零。通过此距离,可以精确定义光圈角度

当我谈到尺寸时,我指的是宽度和高度,所以公式适用于两者


我希望你能理解我的解释。

通过存储对象的真实
(X,Y,Z)
坐标来使用投影,并通过平面上方的二维投影
(K*X/(Z+K),K*Y/(Z+K))
从相机上显示
+Z
单位

要更改高度、宽度,请遵循与精灵的真实大小和外观(绘制)大小类似的模式
(DX,DY)
(K*DX/(Z+K),K*DY/(Z+K))


要做到这一点,您可以遵循本文的建议。

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

是的,我理解你的意思,谢谢你的回答。你认为“单位大小的距离”可以用某种方法计算吗?就像照相机的特性(视场,比率)一样,你可以通过这样做来进一步改进:new_size=f*size/(f+距离)。这样,距离0处的大小将是1,距离f处的大小将是原始大小的一半,等等……这会偏移距离并移动相机后面的“零点”。但是没有人说:“单位大小的距离是图像将以其原始大小绘制的距离”。这意味着在距离f处,新的大小应该是原始大小,因此我们有f*size/f+f=size/2,但它不是原始大小。在@tehvan的建议中,原始大小的点是零距离。他稍微移动了f的意思,但这取决于你,你想要什么。我认为他的公式可以更直观地处理。让精灵变大还是变小?如果使用的是二维等轴测视图,则还需要绘制运动曲线。