java - java中的3D运动图

标签 java opengl animation 3d java-3d

我正在开展一个研究项目,该项目涉及在 java 中可视化 3D 位置坐标 (x,y,z) 以及其他特征(例如点的大小)。

如果位置是二维的,谷歌动态图就完美了。然而,它是 3D 的,因为我正在可视化(随着时间的推移)3 维空间中的运动。

我已经研究这个问题很长一段时间了,我确实发现我可能可以在 java3D 中做到这一点,但是该库似乎已经过时了,我不确定它是否可以处理平滑的动画(假设我有坐标)时间上的每个时刻而不是路径)。对于此任务来说,与 openGL (JOGL) 的连接似乎非常复杂。而且我不确定处理可以处理它。

是否有一种直接的方法可以在 java3D 动画中使用 3D 坐标对球体进行动画处理?同时改变它们的周长?我读了很多教程,但没有什么完全可以做到这一点。或者我是否以错误的方式处理这个问题,是否有某种我可以使用的数学/几何库?

这是我想要实现的目标的示例:

Second 0:
- sphere at (0,0,1): (relative) size 1, colour green
- sphere at (1,1,1): size 2, colour green

Second 1: 
- sphere at (0,2,2): size 3, colour green
- sphere at (4,4,1): size 4, colour red
- sphere at (1,2,1): size 1, colour green

Second 2: 
- sphere at (1,0,1): size 2, colour red

有或没有平滑过渡。我不知道如何开始使用 JOGL 或是否可能。

最佳答案

我从未使用过 Java3D,但我了解 Jogl。

正如我已经提到的,您所描述的是 OpenGL 中的一项非常简单的任务。

基本上,您需要的是这样的伪代码:

loadData();

for(each spehere) {
    updatePositionAndScale(time);
    render();
}

您首先加载单个球体几何体的三角形顶点。鉴于增量半径看起来相当小,您可能只想加载一个球体,否则您可以根据几何形状的丰富性加载多个球体。我的意思本质上是类似的

enter image description here

无论如何,由于球体的数量非常少(现代 GPU 可以轻松处理数百个三角形),您可能需要使用单个高细节球体。

然后,您循环遍历球体,并在每个时间点内计算第 i 个球体的当前过渡位置和比例。如果您需要线性的东西,您可以通过简单的插值来完成此操作。 所有这些参数,位置和缩放,都会影响所谓的模型矩阵,它将模型空间(三角形首先存在的空间)的几何图形转换为世界空间。 对于每个球体,您将更新这些参数,然后渲染它。

现在我们来谈谈后果^^

学习OpenGL需要你投入一些时间。这确实很难估计,因为一切都取决于你开始的知识水平和你想要达到的知识水平。 如果你想让它尽可能小,那就是让它尽可能简单,我想说这不会是一个特别复杂的任务(最后的名言)。 您可能会在几天内完成,这也取决于您的数学技能。 您将学习着色器的基础知识、它们如何读取数据以及它们如何工作、OpenGL 中的转换和(简单)光照。

假设球体的数量也非常少,您可以完全在 java 中完成此操作,无需使用任何加速(例如 OpenGL),从而避免一些痛苦的日子。 但由于您已经在研究 Java3D 和 Jogl,我只是想告诉您,您想要实现的目标非常简单(当然,如果您已经了解 OpenGL)。

因此,缺点是您必须花几天(几周?)时间学习新 API(例如 OpenGL)的基础知识,然后才能达到您想要的效果。 相反,优点是,您将学到新的东西(这总是好的),您将获得硬件加速,这意味着您可以使用所有这些功能,通过使用照明效果使这些球体变得非常详细且美观。 如果你想快速浏览一下,这多么简单Hello Triangle看起来像

关于java - java中的3D运动图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336161/

相关文章:

python - Matplotlib-动画 "No MovieWriters Available"

java - 错误 : Element q not found. ..Eclipse 中的 SeleniumRC...提供了堆栈跟踪和代码..请解决?

java - 相机应平滑地跟随特定点

opengl - 加载并绑定(bind)纹理,但片段着色器不渲染它

c++ - 旋转纹理openGL C++

objective-c - 加载 View 时重置 UILabels 的边界会出现故障 (iOS)

javascript - 使用CSS关键帧动画后如何用jquery重新激活div

java - struts 是 java web 的一个很好的起点吗

Java JNA 写入内存 boolean 值

java - 数组 - 超出随机数范围