我需要一個建議/想法如何在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