3D相机缩放并遵循java中的物理特性?

时间:2009-05-16 00:26:03

标签: java math camera physics

我正在努力使它无论两个物体相隔多远,它们都会留在屏幕上。我正在使用JOGL,但这并不重要,因为我只需要数学方面的帮助。这就是我到目前为止所做的:

float distance = (float) ((Math.sqrt((p1.x - p2.x) + (p1.y - p2.y))));
float camx = (float)((p1.x + p2.x) * 0.5);
float camy = (float)((p1.y + p2.y) * 0.5);
float camz = (float) (distance * 5);

我需要什么数学运算才能正确放大和缩小?

4 个答案:

答案 0 :(得分:3)

如果两个对象的z = 0,并且您的屏幕视角(从屏幕的中心到边缘)是水平和垂直角度的ax和ay,那么:

zx = abs((p1.x-p2.x)*0.5)/tan(ax)
zy = abs((p1.y-p2.y)*0.5)/tan(ay)

camz = max(zx, zy)

这里zx和zy是将对象放到屏幕的水平和垂直维度上的距离,而camz是满足两个标准的距离。还要注意,ax和ay是弧度的(例如,如果你假设你的屏幕是40度宽,那么ax是20度,或者ax = 20 *(pi / 180)= 0.3419弧度)。

您对camx和camy的值是正确的。

答案 1 :(得分:2)

也许我误解了你的情况,但你不能这样做

float camx = (p1.x + p2.x) * 0.5;
float camy = (p1.y + p2.y) * 0.5;
float camz = (p1.z + p2.z) * 0.5;

这会将相机直接放在两个物体之间。

答案 2 :(得分:1)

是否需要更正为,

  

浮动距离=(浮动)((Math.sqrt((p1.x - p2.x)^ 2 +(p1.y - p2.y)^ 2)));

我对语法没有预先确定。我只是告诉你在添加矢量之前需要获得2的幂。

答案 3 :(得分:0)

float distance = (float) ((Math.sqrt(Math.pow((p1.x - p2.x),2.0) + Math.pow((p1.y - p2.y), 2.0))));
float camx = (float)((p1.x + p2.x) * 0.5);
float camy = (float)((p1.y + p2.y) * 0.5);
float camz = (float) Math.abs(distance);