繁体   English   中英

3D相机缩放并遵循Java中的物理原理?

[英]3D Camera Zoom and follow physics in java?

我试图做到这一点,以便无论两个对象相距多远,它们都将保留在屏幕上。 我正在使用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才能正确放大和缩小?

如果两个对象的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值正确。

也许我误会了你的情况,但是你不能做

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

我不太确定语法。 我只是告诉您在添加向量之前需要获得2的幂。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM