11

制作我的 Asteroids 克隆(用 C 语言) 我已经爱上了基于矢量的实体,但我只是将它们编码为 x,y 点数组。对于像 Asteroids 这样的东西来说这很好,但是如果我想制作更复杂的 2D 模型应该怎么做?

我注意到那里有大量的 3D 建模软件,以及大量的教程和帮助将 3D 模型导入到 C/C++ 程序中以与 Open GL 一起使用。

不过,我对创建 2D 矢量模型比 3D 更感兴趣,因为我很高兴继续尝试 2D 游戏一段时间。有没有像二维建模这样的概念?是否有用于创建和导出 2D 模型的工具和专门用于导入 2D 模型的库,或者是否只是在 3D 软件中创建平面模型,然后导入这些文件(例如 .3ds、.ms3d)并将它们平放在 z 轴上?

到目前为止,我唯一的想法可能是使用Inkscape之类的东西进行建模,生成 SVG 文件,然后使用Cairo导入和渲染它们。这会运作良好,还是您有其他建议?

请注意,我对任何类型的建模都是一个新手,所以我可能会问一个愚蠢的问题......

4

3 回答 3

7

无需赞成我自己的答案,但我对使用 SVG 进行了更多研究。当我使用 OpenGL 时,似乎OpenVG可能是一个很好的匹配。

  • AmanithVG - 基于 OpenGL 的 OpenVG 商业实现,具有软件和硬件渲染功能。下载仅供评估,效果很好,虽然我不知道它的成本是多少。
  • ShivaVG - 作者对 AmanithVG 的商业化感到恼火,因此用纯 ANSI C 编写了自己的开源实现。虽然有一段时间没有更新。在 SourceForge
  • Anti-Grain Geometry - 不确定这个。我认为支持 SVG,但我认为只是软件渲染。
  • librsvg - 使用 Cairo 作为主要后端来渲染 SVG。看起来挺好的。

似乎除了 librsvg 之外的所有内容都没有真正允许加载 SVG 文件,所以大概需要另一个步骤,将 SVG 解析为适当的 OpenVG 结构(这主要是大浮点数组,所以不太难)。同样似乎存在从 SVG 到 OpenVG 的项目的一对一映射,这是有希望的。据我所知,OpenVG 几乎是为 SVG 设计的。

我可能会使用 ShivaVG。也许它并不完美,但它吸引了老虎,我喜欢纯 C / OpenGL 实现,我严重怀疑我是否会做任何如此复杂的事情。

于 2010-01-17T02:38:51.527 回答
6

就 2D 矢量游戏编程而言,它通常是 Flash 和 Flex 的领域。

仍然SVG并通过 Cairo 加载它似乎是一个可行的解决方案。虽然我会注意确保您启用了硬件加速(最好是 OpenGL 后端)。

就 2D 格式而言,任何格式都不会像 SVG 那样获得良好的支持,所以我会坚持下去。从技术上讲,像 Collada 或 X3D 这样的东西确实支持 2D 图形,但实际上它们有很多无用的(对于 2D 程序员而言)膨胀。

于 2010-01-16T23:36:46.057 回答
3

SVG 是 2D 的方式 :)

如果绘图速度是一个问题,那么您必须小心文件变得多么复杂 - 并注意 SVG 也没有针对解析速度进行优化,因此在加载时可能会导致显着的启动时间损失你的模型。

于 2010-01-16T23:40:47.060 回答