2013-03-05 42 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