我正在制作一个简单的2D游戏,并试图模仿3D视角(类似于像Monkey Island这样的早期游戏)。我现在已经搜索了一段时间,而且一切似乎都在处理3D。有没有人碰巧知道我会用DIV向上移动(远离)相机时使用的公式?
谢谢!
答案 0 :(得分:2)
在猴岛,背景是具有不同透视度的2D图像。如何缩放角色取决于背景的视角。在某些场景中,角色仅在屏幕上移动,因此角色不需要更改比例。在某些人物中,角色可能会沿着街道向下移动,并且视角很高。在某些情况下,角色可能会在一个房间内移动,而且视角很小。
需要为每个背景场景计算关于角色缩放的计算。需要在背景和长度上绘制透视线。
下面的两个示例显示了如何计算角色的比例。
在每种情况下,缩放都基于当前在屏幕上定位的字符。变量y是字符在垂直方向上与其SMALLEST大小位置的距离的度量。变量h是根据y确定角色高度变化的度量。
在房间场景中,比例是> 1因为角色当前位于场景的后面。
在街景中,比例为< 1,因为角色当前处于场景的起源。
不按比例绘制的三角图
答案 1 :(得分:1)
我不确定DIV(我没有JavaScript体验)是什么,但这些链接可能会有所帮助。
Perspective Projection
引导您完成透视投影中使用的数学计算,并包含一些示例代码(但不是JavaScript)。
3D Perspective Projection
关于透视投影的另一页,使用C ++中的示例代码。
答案 2 :(得分:1)
我会这样做:
// equation for objects appearing the same size
h=d*tan(α)
// now the scaling the size for arbitrary object
scale d h
1.0 d0 h0 // object with no scaling
0.5 2.0*d0 h0 // half size
0.25 4.0*d0 h0 // quoter size
0.5 d0 0.5 *h0
0.25 d0 0.25*h0
// so scale is:
scale = (d0/d)*(h/h0) // or
scale = (d0*h)/(d*h0)
如果您的相机在轴之间具有不同的视角,则必须应用两个缩放系数
3D中的常用相机视角为60度或90度,但在这种情况下,我会使用30度
答案 3 :(得分:0)
在真实的透视投影中,缩放因子由S(D)= Df / D给出,其中Df是从观察者到全尺寸物体的深度,D是当前深度。
例如,如果一个字符高40像素,在前景中看到16大(假设距离观看者3米),则在深度为6米时为20乘8像素,在12米处为10乘4。
比参考距离更近将导致放大(在1.5米处为80×32)。
[如果您的对象位于(X,Y,Z)坐标,X水平,Y垂直,Z垂直于屏幕,指向背面,并且在屏幕深度为0,则您有D = Z + Df和S(D)= Df /(Df + Z)。]
答案 4 :(得分:0)
既然您正在谈论转换DIV,那么您应该看到CSS转换。有2D变换和3D变换。请记住perspective属性;)
您可以在这里找到一些例子: