2010-08-08 43 views

回答

4

我会去Swing和Java2D或OpenGL(JOGL)。

我几次使用OpenGL,使用JOGL的扩展(TextRenderer)很容易绘制文本。

如果您选择Swing,那么硬件部分将会执行3D转换。你必须写一些粒子系统。粒子必须驻留在3D球体上。你本人将负责做任何3D转换,但使用正交投影将是微不足道的。所以这是一个很好的练习 - 你需要的是这里:Wiki's spherical coord sys和这里3d to 2d projection

完成所有转换后,只剩下绘图。 Java2D和Swing为此提供了非常方便的API。它会归结为选择字体大小,并在给定的坐标绘制文本。自定义JPanel与覆盖paintComponent方法将足以开始和结束。

至于第二选择,最难的部分是OpenGL API本身。它是程序化的,所以如果你主要熟悉Java你会很难使用非OO的东西。它可以习惯,老实说,可以是相当有益的,因为你可以做很多事情。如果您选择OpenGL,那么您可以免费获得所有3D转换,但您仍然必须自行从球坐标系转换为笛卡尔(第一篇wiki文章仍然有用)。之后,它只是使用一些文本绘图类的问题,如JOGL分发附带的TextRenderer

因此,OpenGL可以帮助您进行视图投影计算并进行硬件加速。 Java2D将需要更多的数学用途,但在我看来,这种方法似乎更容易一些。哦,顺便说一句 - Java2D尝试在内部使用任何图形加速(OpenGL或DirectDraw)。所以你被屏蔽了某些低级别的问题。

对于两个选项您还需要将鼠标坐标s与球体的旋转速度绑定。无论是Java2D还是OpenGL,代码看起来都很相似。只需将与面板中心相关的鼠标坐标映射到某个速度矢量即可。在绘图时您可以使用矢量来相应地旋转球体。

还有一件事:如果您想尝试OpenGL,我建议:在MIT上创建的Processing language尤其适用于丰富的图形小程序。他们的3D API,并非如此巧合,几乎与OpenGL一样,但没有太多的东西。所以如果你想要最快的原型这是最好的选择。实际示例请参阅this discussion thread。注意:处理是用Java编写的。

+0

感谢您提供详细且有用的答案!对不起,我没有足够的投票信誉:( Java2D解决方案将适合,但我需要的文字是可点击的 请问,请问,JOGL提供了一些机制,允许听取点击呈现文字?所以 - 我将开始旅程...... – xolmc 2010-08-08 10:17:57

+0

是的,有一个特殊的设施 - OpenGL采摘(请参阅http://www.lighthouse3d.com/opengl/picking/)。它的工作原理是您设置了一个名称对象,然后使用特殊的渲染模式来识别它,它会变得非常混乱,因为它的级别很低,但是我做了几次,所以如果需要的话可以提供帮助 – Rekin 2010-08-08 10:26:11

1

为什么不只是download的源代码,并看看?即使你不能编写PHP,也应该可以读取它并找出算法的工作原理。

+0

我会这样做,如果没有更少的痛苦的方式:)像Java源码。 顺便说一下,你可以提出什么样的渲染技术 - JPanel/JLabel或者可能是OpenGL或者smth。其他? – xolmc 2010-08-08 07:33:26

+0

这是一部Flash影片,源代码位于ActionScript中 - 不是PHP。 – Rekin 2010-08-08 09:11:01

+1

或者,'svn co http:// svn.wp-plugins.org/wp-cumulus/trunk'。 – trashgod 2010-08-08 09:50:23

3

这不是真的3D。在某些3D形状(如球体)上没有透视变换或映射文本。你有什么是一串字符串,其中每个字符串都有一个关联的深度(或Z顺序)。与你“接近”的字符串被绘成更强的灰色阴影和更大的字体大小。

当您移动鼠标时,每个字符串的运动实际上是一个3D形状,看起来像一个固定中心周围的倾斜圆 - 倾斜取决于鼠标光标的位置。这很简单 - 如果你计算出一个字符串,你就可以计算出来。然后最后一部分是分散琴弦,使它们不会重叠太多,并根据它们的频率为每个琴弦赋予初始重量。

这就是most of the code正在做的事情。所以你需要做数学运算,或者把ActionScript翻译成Java2D。不,不需要JOGL。

+1

+1在数学上你的答案似乎有一个坚实的基础。会试试看,谢谢。 – Favonius 2011-02-25 18:10:17