我需要一个建议/想法如何用Java创建3D标签云(Swing) (完全如下所示:http://www.adesblog.com/2008/08/27/wp-cumulus-plugin/) 你能帮忙吗?
答案 0 :(得分:4)
我要使用Swing和Java2D或OpenGL(JOGL)。
我几次使用OpenGL,使用JOGL的扩展(TextRenderer)可以轻松绘制文本。
如果选择Swing,那么硬件将会实现3D转换。你必须写一些粒子系统。粒子必须驻留在3D球体上。你个人将负责任何3D转换,但使用简单的正交投影。所以这是一个很好的练习 - 你需要的是:Wiki's spherical coord sys和3d to 2d projection。
完成所有转换后,只留下绘图。而Java2D和Swing为此提供了非常方便的API。它可以归结为选择字体大小并在给定坐标处绘制文本。使用覆盖paintComponent
方法的自定义JPanel就足以开始和结束。
至于第二种选择,最难的部分是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编写的。
答案 1 :(得分:3)
那不是3D。没有透视变换或将文本映射到某些3D形状(例如,球体)上。你拥有的是一串字符串,其中每个字符串都有一个相关的深度(或Z顺序)。 “靠近”的字符串涂有更强的灰色阴影和更大的字体大小。
移动鼠标时每个字符串的运动确实是一个3D形状,看起来像一个固定中心周围的倾斜圆 - 斜面取决于鼠标光标的位置。这是一个简单的数学 - 如果你把它想象成一个字符串,你可以解决所有问题。然后最后一部分就是散布琴弦,使它们不会重叠太多,并根据频率为每个琴弦分配初始重量。
这就是most of the code正在做的事情。因此,您需要进行数学计算,或者盲目地将ActionScript转换为Java2D。不,不需要JOGL。
答案 2 :(得分:1)
为什么不只是download源代码,看看?即使你不能编写PHP,仍然可以阅读它并弄清楚算法是如何工作的。