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

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

我需要什么数学运算才能使 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 值是正确的。

关于java - 3D相机缩放并遵循java中的物理原理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/871345/

相关文章:

java - Clojure Noir WAR/Servlet (CloudFoundry) 的初始化 Hook

java - 连接组件标记

java - 指定的 child 已经有一个 parent 。您必须首先在 child 的 parent 上调用 removeView() (Android)

opencv - 查找数码相机的固有参数

java - com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException :

java - java中有没有找到antilog的函数?

python - 加倍二进制数

java.math.BigInteger 无法转换为 java.math.BigDecimal

android - torch 应用安卓

javascript - 如何在 Phonegap 中启用前置摄像头