有没有一种方法可以将矢量图形融入LibGDX开发中?

9

我在LibGDX中没有找到适用于矢量图形的任何内容。

这篇文章建议AGG是最接近的选择,但他们也提到它很痛苦。

是否有无痛的替代方案?

2个回答

5

目前(2013年中),Libgdx似乎没有对矢量图形提供无痛支持。通常情况下,这意味着需要使用SVG

"通用"SVG解决方案的问题之一是,似乎很难解决所有各种情况的问题。然而,如果您只是尝试渲染自己的SVG对象,则可能只需要处理更简单的SVG子集,并且可以通过一些技巧来实现(即使它不够通用)。

另外,如果您愿意将位图作为中介(您不需要直接将矢量图形渲染到屏幕上),则只需要找到一个基于Java的SVG解析器和栅格化器(而不是使用Libgdx或LWJGL后端的解析器和栅格化器)。

请看 使用SVG文件与libgdx。建议在需要简单“可缩放”图形时使用Libgdx ShapeRenderer。它不是SVG,但对于您的用例可能是合理的选择。
谷歌搜索找到了这个 GPL的Java SVG渲染器,它使用AWT后端。这段代码看起来足够简单,可以改编为使用Libgdx渲染。但是,由于它的简单性,不清楚它实际上支持多少SVG(甚至是否能正常工作)。

Apache Batik项目是一个通用的Java SVG解析器和渲染器。它看起来很庞大。您可能可以使用它将SVG渲染为.png格式(然后将其转换为Libgdx Pixmaps)。 (我没有任何经验。)

有一个(已死?) libgdx SVG扩展项目,但看起来只完成了最基本的SVG解析。


4
我也正在学习LibGDX,即将面临与您类似的问题:在正交视图中渲染2D模型。
LibGDX使用OpenGL ES进行图形处理,同时支持导入通过Blender 3D插件创建的模型。虽然我还没有尝试过,但下面是一种解决方案: 从Blender导入模型 处理代码 我认为解决此问题的方法之一是在Blender 3D中建模可缩放的图形。如果您使用的是SVG文件,则Blender 3D可以导入这些文件,因此您可以将Blender 3D作为第一个接触点。

新增: 我现在已经成功完成了。不过有一个小细节:使用Python脚本的方法已经过时了。在上面第一个链接的页面评论中,有一个链接指向xoppa的教程,里面介绍了如何使用FBX转换工具导出模型。我在Blender 3D中创建了一个朝向前视图的二维平面形状。将其导出为FBX文件,并使用转换工具制作了一个G3DB文件。按照xoppa教程中描述的那样使用LibGdx的G3dModelLoader方法,您现在可以使用ModelBatch在视图中绘制它。将您的正交摄像机看向0,0,0(或者适合您需求的任何位置),并稍微往z轴后退一点——否则您将无法看到它。由于它是正交相机,所以无论距离有多远都没有关系,但是某种程度上0,0,1会有些意义 :) 还要记得在每帧渲染时清除GL_DEPTH_BUFFER_BIT。


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