我需要一个建议/想法如何在Java(Swing) (完全如图所示:http://www.adesblog.com/2008/08/27/wp-cumulus-plugin/) 中创建3D标签云,请问您能帮忙吗?如何在Java中创建3D标签云
回答
我会去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编写的。
为什么不只是download的源代码,并看看?即使你不能编写PHP,也应该可以读取它并找出算法的工作原理。
这不是真的3D。在某些3D形状(如球体)上没有透视变换或映射文本。你有什么是一串字符串,其中每个字符串都有一个关联的深度(或Z顺序)。与你“接近”的字符串被绘成更强的灰色阴影和更大的字体大小。
当您移动鼠标时,每个字符串的运动实际上是一个3D形状,看起来像一个固定中心周围的倾斜圆 - 倾斜取决于鼠标光标的位置。这很简单 - 如果你计算出一个字符串,你就可以计算出来。然后最后一部分是分散琴弦,使它们不会重叠太多,并根据它们的频率为每个琴弦赋予初始重量。
这就是most of the code正在做的事情。所以你需要做数学运算,或者把ActionScript翻译成Java2D。不,不需要JOGL。
+1在数学上你的答案似乎有一个坚实的基础。会试试看,谢谢。 – Favonius 2011-02-25 18:10:17
- 1. 如何在SharePoint中创建标签云?
- 2. 3d标签云asp.net
- 3. 在Coldfusion中创建标签云或JavaScript
- 4. 3D球体标签云
- 5. 如何在java中创建3D数组?
- 6. 如何在Drupal 7中创建标签云?
- 7. 使用Python创建HTML标签云?
- 8. 创建特定尺寸的标签云
- 9. 如何在android中创建子标签?
- 10. 在WPF中构建标签云
- 11. 如何在acts_as_taggable_on中生成标签云?
- 12. 如何在ASP.NET中制作标签云?
- 13. 标签云库的Java
- 14. 如何使用OpenCloud在Java中生成标签云?
- 15. 在css中创建简单的标签云
- 16. 如何在Drupal-6中使用标签云创建简单的公司博客?
- 17. 如何创建标签? Docpad
- 18. 如何在matlab中创建3D数组?
- 19. 如何在fabric.js中创建3D预览
- 20. 如何在3D世界中创建块?
- 21. 如何创建3D模型,然后从中创建图标/徽标?
- 22. 如何在Google maps 3d flash api中创建平面标记?
- 23. 如何在iOS上创建标签栏?
- 24. 如何在iPhone上实现标签云?
- 25. 如何创建3D模拟?
- 26. 如何创建3D对象
- 27. 如何创建3D网页?
- 28. 如何在创建标签时将user_id分配给标签?
- 29. 如何区分云标签中的标签流行度?
- 30. Nhibernate标签云
感谢您提供详细且有用的答案!对不起,我没有足够的投票信誉:( Java2D解决方案将适合,但我需要的文字是可点击的 请问,请问,JOGL提供了一些机制,允许听取点击呈现文字?所以 - 我将开始旅程...... – xolmc 2010-08-08 10:17:57
是的,有一个特殊的设施 - OpenGL采摘(请参阅http://www.lighthouse3d.com/opengl/picking/)。它的工作原理是您设置了一个名称对象,然后使用特殊的渲染模式来识别它,它会变得非常混乱,因为它的级别很低,但是我做了几次,所以如果需要的话可以提供帮助 – Rekin 2010-08-08 10:26:11