使用SVG文件与libgdx

16
我计划创建平板应用程序。我需要一些指导。
我有像这个那样的SVG格式图片。
使用SVG很容易,您只需将填充参数更改为不同的颜色,但据我了解,没有易于/稳定的SVG处理可与libgdx一起使用。我仍然想使用SVG文件来创建/存储我的应用程序中的图像。
你推荐什么处理路径?
是否有一种简单的方法将SVG路径/形状转换为com.badlogic.gdx.math.bezier或多边形对象,然后在屏幕上绘制它们/获取用户输入(轻触)在这些形状内?
还是我应该使用不同的对象/路径?
例如,形状可以分组在一起,我想要房子里的两个窗户同时改变颜色。

我不确定你想要实现什么,但有很多方法可以将路径数据转换为其他数据结构。但原则上,我只能说SVG路径数据结构非常简单易懂。在这里看一下:http://www.w3.org/TR/SVG/paths.html#PathData 编写一个解析器并不难,有了它,你可以将其嵌入到任何框架中... - philipp
我只是想画一幅图片,然后通过在形状内部轻触来着色。我知道如何解析SVG,但不确定对于这种应用程序应该使用哪些libgdx对象。谢谢! - tester.one
2个回答

9
LibGDX的编写方式是提供了一种更底层的渲染方式,但并不提供渲染SVG的开箱即用的方法。这真的取决于您是要寻找性能还是只想绘制基本形状。
要简单地渲染形状,您可以使用类似ShapeRenderer的东西。它为您提供了非常接近Java2D绘制方式的接口。也许对于快速绘制一些基本内容,这可能很方便。
如果您想要进行更强大的渲染版本,则可能需要查看使用Mesh并使用OpenGL ES着色器的方法。您可以在LibGDX测试中找到这些示例,也可以在网上搜索示例/教程。
如果您想将SVG转换为纹理,您需要查看Pixmap,然后可以使用它创建纹理,并使用Spritebatch进行渲染。您需要使用Pixmap编写要着色的像素等内容。但是,这样做会生成一个未管理的纹理(即,在用户按下返回键或将设备置于睡眠状态后,您需要重新构建它)。

2
谢谢。我认为我不需要太快的速度 - 但如果我理解正确,ShapeRenderer不能绘制贝塞尔曲线?另外,重要的是能够轻松地用不同的颜色填充这些形状 - 所以像素图可能没有那么有用?现在我只需要知道是否可以使用网格来实现 :) - tester.one
网格只是OpenGL VBO的高级抽象。如果您熟悉VBO,则应该相对容易。真正的挑战在于编写算法以生成形状/线条等的三角形。 - Jyro117
好的,我进行了一些测试,看起来我可以从Blender导入网格(将SVG导入Blender,转换为网格,导出到g3dt,移动到应用程序,从文件创建stillModel)。问题是我无法理解如何在屏幕上显示它。有时它会填充整个视图,有时它只是一条小线(我改变颜色以查看它)。如果我尝试使用相机,一切都会消失...导入网格到相机的规则是什么?或者我应该在导出之前在Blender中进行某些设置? - tester.one
有很多事情可能会导致问题。我不确定blender会为网格的顶点设置什么样的位置信息。相机允许您更改屏幕的视口。默认情况下,opengl在X和Y方向上绘制-1到1之间的所有内容。相机类只是更改它,以便您可以在不同的值之间绘制东西,例如像素、透视视图等。这个libgdx测试可能会帮助您了解如何使用“模型”https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/ObjTest.java - Jyro117

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接