我试图让这个无论相隔多远两个对象是他们都会在屏幕上停留。我使用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);

什么是我需要的数学所以在Z进出正确缩放?

有帮助吗?

解决方案 4

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);

其他提示

如果两个对象具有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度宽,然后斧是20度,或斧头= 20 *(PI / 180)= 0.3419弧度)。

您为CAMX和camY的值是正确的。

也许我误解你的情况,但你能不能只是做

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

这将直接将相机定位在两个物体之间。

如果它需要被校正为,

  

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

我不prettey肯定的语法。我只是告诉你需要添加矢量之前得到的2力量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top