[android] 使用OpenGL(和OpenGL ES)渲染SVG



Answers

在OpenGL ES之上查看MonkVG和OpenVG之類的API實現。

此外,對於OpenVG(MonkVG)結帳MonkSVG上的SVG渲染。

MonkVG專為iOS,OSX和Android平台而構建。

我是兩個圖書館的作者,很樂意回答任何問題。

Question

我目前正在研究使用OpenGL和OpenGL ES從SVG文件渲染矢量圖形的可能性。 我打算以Windows和Android為目標。 我理想的解決方案是擁有一個最小的C庫,從給定的SVG文件生成多邊形三角剖分。 然後,這將生成標準的OpenGL或OpenGL ES調用,並在重繪時使用顯示列表或vbo進行優化。 我只需繪製一個顯示列表,在翻譯和旋轉後繪製矢量圖像,允許我將其與其他OpenGL調用混合。

到目前為止,我看到建議首先使用QT或開羅。 - 這不是一個選項,因為我希望在沒有膨脹庫的情況下管理我自己的OpenGL上下文(在我想要實現的內容中)。 這也不適合Android。

第二個選項是使用渲染到紋理的庫。 雖然靜態矢量圖形可能沒問題,但對於頻繁出現縮放和旋轉的遊戲來說,它不是一個有效或可行的選擇。

第三,有可能使用OpenVG。 OpenVG規範(ShivaVG等)有一些開源實現,但是我還沒有找到一個能夠在運行時從給定的SVG文件生成適當的OpenVG調用的庫,我無法看到如何優化它我們可能希望使用顯示列表或vbo。

這三種方法都有局限性。 我認為最有希望的選擇是在沒有其他解決方案的情況下使用OpenVG實現。 所以我的問題是,是否有任何圖書館可以做我想要的,或接近我想要的? 如果沒有,有什麼理由不是嗎? 嘗試從頭開始這樣做會更好嗎?




我目前正在研究使用OpenGL和OpenGL ES從SVG文件渲染矢量圖形的可能性。 我打算以Windows和Android為目標。 我理想的解決方案是擁有一個最小的C庫,從給定的SVG文件生成多邊形三角剖分。 然後,這將生成標準的OpenGL或OpenGL ES調用,並在重繪時使用顯示列表或vbo進行優化。 我只需繪製一個顯示列表,在翻譯和旋轉後繪製矢量圖像,允許我將其與其他OpenGL>調用混合。

如果你只想將SVG矢量形狀轉換為OpenGL | ES,那麼我建議你自己做解析器和邏輯。 請注意,SVG是一個巨大的規範,具有不同的功能,如繪製服務器(漸變,模式......),引用,過濾器,剪輯,字體處理,動畫,腳本,鏈接等。

如果您需要完整的svg支持,那麼在http://code.google.com/p/enesim上有一個名為egueb(尤其是esvg)的庫,它使用enesim(具有軟件和opengl後端的渲染庫)進行繪製。 在大多數情況下,它使用著色器,並且所有內容都被渲染成紋理,庫非常靈活,允許您適應您的特定需求,例如修改渲染場景,變換它等等。因為gl繪圖總是在紋理中完成。

到目前為止,我看到建議首先使用QT或開羅。 - 這不是一個選項,因為我希望在沒有膨脹庫的情況下管理我自己的OpenGL上下文(在我想要實現的內容中)。 這也不適合Android。

第二個選項是使用渲染到紋理的庫。 雖然靜態矢量圖形可能沒問題,但對於頻繁出現縮放和旋轉的遊戲來說,它不是一個有效或可行的選擇。

在gl後端的特定情況下,enesim不會創建GLX(或任何其他窗口相關的上下文),您必須提供它,因此它完全適應您的情況,因為它只使用GL調用。

唯一的缺點是庫在gl支持或完整的SVG規範支持方面尚未完成,但根據您的需要,在我看來似乎是一個不錯的選擇。




你可以看看AmanithVG ,他們似乎已經實現了一個好的路徑 - >三角形管道。 我已經嘗試了iOS GL老虎的例子,看來三角測量不是真正的瓶頸。






Related