2013-03-05 60 views
12

我打算創建平板電腦應用程序。我會問一些指導。使用libgdx的SVG文件

我使用SVG格式的圖片,如this one

使用SVG很簡單,您只需將填充參數更改爲不同的顏色,但據我所知,沒有簡單/穩定的svg處理與libgdx一起使用。我仍然想使用svg文件爲我的應用程序創建/存儲圖像。

  • 你會推薦什麼處理路徑?
  • 有沒有一種簡單的方法來轉換com.badlogic.gdx.math.bezier或多邊形對象的svg路徑/形狀,然後在屏幕上繪製/獲取用戶輸入(點擊)在這些形狀內?
  • 或者我應該使用不同的對象/路徑?

形狀可以組合在一起,例如我想要一個房子裏的兩個窗口一次改變顏色。

+0

我不確定你想要完成什麼,但有很多方法將路徑數據轉換爲其他數據結構。但原則上我只能說svg路徑數據結構很簡單,很容易理解。看看這裏:http://www.w3.org/TR/SVG/paths.html#PathData寫這個解析器真的不難,用它你可以填充到每個框架... – philipp 2013-03-05 10:28:28

+0

我只是嘗試繪製圖片,然後通過點擊內部形狀來爲其着色。 我知道如何解析SVG,但我不確定我應該使用哪種libgdx對象作爲此類應用程序的結果。 謝謝! – Robert 2013-03-05 10:37:56

回答

9

LibGDX的編寫方式是讓您以較低級別的方式來執行此類渲染,但不提供可用於渲染SVG的開箱方式。這真的取決於你是否在尋找具有性能的東西,或者只是想要繪製基本的形狀。

要簡單地渲染形狀,你可以使用類似ShapeRenderer的東西。這爲您提供了一個非常接近Java2D繪製方式的界面。也許要快速繪製一些基本的東西,這可能是方便的。

如果你想要做一些更強大的渲染版本,你可能會想使用Mesh和OpenGL ES的着色器。您可以在LibGDX tests中找到這些示例以及在線搜索示例/教程。

如果您想將SVG轉換爲紋理,您需要查看Pixmap,然後您可以使用它創建紋理並使用Spritebatch進行渲染。您需要使用Pixmap編寫想要着色的像素等。但是,這樣做會產生一個非託管紋理(即,當用戶在按下或使設備進入睡眠狀態後回到應用程序時,您將不得不重建它)。

+1

謝謝。我不認爲我需要很多速度 - 但如果我理解正確ShapeRenderer不允許繪製貝塞爾曲線?用不同的顏色輕鬆填充這些形狀也很重要 - 所以像素圖可能沒有那麼有用? 現在我只需要知道它是否可能與網格:) – Robert 2013-03-16 19:17:40

+0

網格只是OpenGL VBOs的高層次抽象。如果你對維也納各組織感到滿意,那麼它應該相當簡單。真正的挑戰是必須對算法進行編碼,以便爲您的形狀/線條等生成三角形。 – Jyro117 2013-03-16 23:00:48

+0

好吧,我做了一些測試,看起來我可以從攪拌器導入網格(將SVG導入攪拌器,轉換成網格,導出到g3dt,移動到應用程序,從文件創建stillModel)。 問題是我無法掌握在屏幕上顯示它的方式。有時它會填滿所有的視圖,有時它只是一小段(我改變它的顏色來查看它)。如果我嘗試使用相機 - 一切都會消失... 將導入的網格物體定位到相機的規則是什麼?或者我應該在出口之前以某種方式在攪拌機中進行操作? – Robert 2013-04-03 19:43:40