java中的三维运动图

java中的三维运动图,java,opengl,animation,3d,java-3d,Java,Opengl,Animation,3d,Java 3d,我正在从事一项研究项目,该项目涉及在java中可视化3D位置坐标(x,y,z)以及其他特征(如点的大小) 如果位置在2D,谷歌运动图将是完美的。然而,它是三维的,因为我(随着时间的推移)在三维空间中可视化运动 我已经对此进行了相当长一段时间的研究,我确实发现我可能可以在java3D中实现它,但该库似乎过时了,我不确定它是否能够处理平滑动画(考虑到我在每一时刻都有坐标,而不是路径)。对于这个任务,与openGL(JOGL)的连接似乎非常复杂。我不确定处理是否可以处理它 在java3D的动画中,是否

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

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

我已经对此进行了相当长一段时间的研究,我确实发现我可能可以在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();
}
首先加载单个球体几何体的三角形顶点。如果delta半径看起来很小,您可能只需要加载一个球体,否则可以根据几何体的丰富程度加载多个球体。我的意思基本上是类似的

无论如何,由于球体的数量非常少(现代GPU可以轻松处理数百个三角形),因此您可能希望在此处使用一个高细节的球体

然后,在球体上循环,对于每一个滴答声,计算当前过渡位置和
i-th
spehere的比例。如果需要线性的东西,可以通过简单的插值来实现。 所有这些参数(位置和缩放)都将影响所谓的模型矩阵,该矩阵将模型空间的几何体(三角形首先存在的空间)转换为世界空间。 对于每个球体,您将更新这些参数,然后只渲染它

现在让我们谈谈后果^^

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

假设球体的数量也非常少,您可以完全用java来实现这一点,而无需使用任何加速(如OpenGL)并节省一些痛苦的日子。 但既然您已经在研究Java3D和Jogl,我只想告诉您,您想要实现的是非常基本的(当然,如果您已经知道OpenGL的话)

因此,不利的一面是,在达到您想要的目标之前,您将不得不调查几天(几周?)来学习新API(如OpenGL)的基础知识。 优点是,相反,你会学到一些新的东西(这总是很好),你会得到硬件加速,这意味着你可以利用所有这些能力,通过使用灯光效果,使这些球体非常详细和好看。
如果您想快速查看,这是一个简单的视图的样子

Hi dorien,如果我没有弄错,您需要渲染多个球体并在运行时更新它们的位置。在opengl/jogl中,这是一项相对简单的任务。改变他们的周长似乎有点棘手。有两个选项,您可能希望缩放它,使所有对象都变大/变小,或者您可能希望使用另一组几何体,根据您是增加还是减少几何体,或多或少地进行定义。无论如何,你应该试着更深入地解释你真正需要什么。有多少个球体,它们之间的差值有多大,更新的频率有多高,为了更清楚地说明这一点,我在问题中添加了一个我想实现的最小示例。通过平滑过渡,你的意思是,例如,spere[(0,0,1),1,绿色]变成[(0,2,2),3,绿色]或者第二个0的球体应该消失,而第二个1的球体应该出现?确实,“变成”选项似乎是最好的,但我对其中任何一个都很满意。我们谈论的是多少个球体?只是想知道性能是否是您使用OpenGL的另一个原因非常感谢您的详细解释。我想我需要学习这个。希望它能迅速发展:)