在java中的3D运动图

时间:2015-10-25 23:11:42

标签: java opengl animation 3d java-3d

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

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

我已经研究了很长一段时间了,我确实发现我可能在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开始这个或者如果可能的话。

1 个答案:

答案 0 :(得分:1)

我从未使用过Java3D,但我知道Jogl。

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

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

loadData();

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

首先加载单个球体几何体的三角形顶点。鉴于delta半径看起来非常小,您可能只想加载一个球体,否则您可以根据几何体的丰富度加载多个球体。我的意思基本上是类似的东西

enter image description here

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

然后你循环你的球体,并且对于每个时间刻度,你计算i-th范围的当前转换位置和比例。如果需要线性的话,可以通过简单的插值来完成。 所有这些参数,位置和缩放都将影响它所谓的模型矩阵,它将模型空间(三角形首次存在的空间)的几何变换为世界空间。 对于每个球体,您将更新这些参数,然后您将只渲染它。

现在让我们谈谈后果^^

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

让我们说,考虑到球体的数量也非常低,你可以在java中完全做到这一点,不使用任何加速度(如OpenGL)并节省一些痛苦的日子。 但是既然你已经在研究Java3D和Jogl了,我只是想告诉你,你想要实现的是非常基础的(当然,如果你已经知道了OpenGL)。

所以缺点是你需要调查几天(几周?)来学习新API的基础知识,比如OpenGL,然后才能达到你想要的效果。 相反,你会学到新的东西(这总是很好),你将获得硬件加速,这意味着你可以利用所有这些力量通过使用灯光效果使这些球体非常细致和美观。 如果你想快速浏览一下,这就是一个简单的Hello Triangle看起来像