用于联网世界模拟/ AI沙箱的3D游戏引擎

时间:2010-03-18 16:43:20

标签: xna game-engine ogre3d panda3d

超过5年前,我正在玩DirectSound和Direct3D,我发现它真的令人兴奋,尽管用C ++花了很多时间才能获得一些好的结果。那时我还是一名大学生。 现在我主要拥有C#和PHP的企业开发经验,而且我是为了生活而做的。我们国家的游戏开发真的没有机会赚钱。每天越来越多我发现我错过了什么。所以我决定每天花一个小时左右来编程以获得乐趣。

所以我的想法是建立一个世界模拟。我想从一些简单的东西开始 - 一些类似人类的生物 - 就像模拟人生3一样,但更简单,只是基本需求,基本动画,最小的图形资产 - 我想它不会是一个城市而只是一个大房子开始。我们的想法是拥有某种服务器应用程序,它将世界数据存储在MySQL数据库中,以及一些客户端应用程序 - 无体AI机器人模拟运动以及与世界和彼此的一些交互。但没有3D它就不会有趣。所以也有3D客户端 - 我可以进入虚拟世界并看到AI机器人的生活。当机器人进入可见区域时,它变成了材料 - 加载网格和动画,所以我可以看到它。当我离开时,机器人再次失去了它们的三维网状物体,但它们的虚拟生命仍在继续。

随着时间的推移,我希望能够像一些可扩展的脚本沙箱一样来试验各种AI算法等等。但我并不打算创建一个成熟的MMORPG:D

我已经寻找了许多我需要的东西(免费和开源),现在我必须做出选择:

  • OGRE3D + enet(或RakNet)。旧的好C ++。但是,它不会让我慢下来,以至于我再也不会玩得开心了吗?

  • CrystalSpace。正式不是游戏引擎,但非常接近。再次使用C ++。

  • MOgre(适用于.NET的OGRE3D包装器)+ lidgren(已在某些游戏项目中使用的网络库)。好 - 我喜欢C#,它适合快速编程,也可以用于编写脚本。

  • XNA似乎只是一个框架,而不是引擎,所以我真的有疑虑,我是否应该看看XNA Game Studio :(

  • Panda3D - 具有正反馈的完整游戏引擎。我真的很想将所有工具集放在一个软件包中,它作为一个初学者友好的引擎有很好的评论...如果你了解Python。在C ++方面,Panda3D几乎不存在文档。我有使用Python的经验,但我听说它很容易学习。如果这将是有趣和具有挑战性的,那么我想我将从另一种编程语言的经验中受益。

你会建议哪一个,不是因为高级功能或良好的平台支持,而是主要是为了有趣,简单的工作流程和可扩展性,所以我可以创建和集成我需要的所有组件 - 服务器与数据库,AI机器人和3D客户端应用程序?

3 个答案:

答案 0 :(得分:3)

我只使用过XNA,所以我真的无法与其他人进行比较。我会说,虽然XNA只是一个框架,TorqueX 3D是一个引擎。当您注册开发XNA(100美元/年)时,您可以访问TorqueX 2D和3D引擎二进制文件。

我没有使用3D引擎,但我使用了2D引擎。我会说API上的文档可能有点稀疏,但是它们有一些非常好的介绍教程和一个非常有用且活跃的论坛,可以解答教程无法解答的问题。

您对C#的体验显然会非常方便。但是你必须坚持使用Windows开发,因为你无法访问Xbox 360上的网络堆栈(或数据库)。

一旦我完成了教程并习惯了Torque的风格,我发现使用起来非常有趣。添加对象/行为非常容易。一些XNA框架的最新版本改进了声音支持并使其变得非常简单。它有一个很好的2D编辑器,我认为3D编辑器也很不错(还没有真正尝试过)来帮助你开始创建关卡。我想它在网络/数据库部门缺乏,但你必须使用标准的.NET内容或引入其他库来使用。

我认为无论如何都要花时间看一下它并将其与其他人进行比较。我相信你可以下载一个免费(30天)的试用版,即使你没有注册XNA,如果你想玩它。祝你好运!

答案 1 :(得分:2)

Panda3D看起来有希望,因为它有一种方法可以在运行时修改网格物体(这个功能在许多3D引擎中缺乏,有缺陷或很难使用),这将是你需要的交互式客户端网格变化所记录的一个普通的服务器在您的数据库中,请确保包含修改时间戳,以便您可以运行适当的查询以生成客户端的修补程序,以便在更改时获取更新网格信息。

使用InnoDB你可以使表格像我的SQL可能已关闭,但这给出了这个想法:

create table `vertex` (
  `id` bigint(15) not null auto_increment,
  `when` timestamp default now() not null,
  `x` number not null,
  `y` number not null,
  `z` number not null,
  `cR` number default 0.0 not null,
  `cG` number default 0.0 not null,
  `cB` number default 0.0 not null,
  `cA` number default 1.0 not null,
  `u` number default 0.5 not null,
  `v` number default 0.5 not null
) primary key (id) ENGINE=InnoDB;

create table triangles (
  `p1` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `p2` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `p3` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `when` timestamp default now() not null
) primary key (p1,p2,p3) ENGINE=InnoDB;

id是时间戳时的顶点id,允许您创建更新补丁 x,y,z是3d顶点 cR,cG,cB,cA是RGBA顶点颜色 u,v是顶点纹理坐标 p1,p2,p3引用顶点表中的顶点以形成由这些外键引用指示的三角形... InnoDB允许我们防止未定义的顶点(即:一致性)相关问题,因此也可以使用它。如果在您的情况下删除具有已删除顶点的所有三角形是可以接受的,则将“restrict”更改为“cascade”(使用删除顶点时使用三角形将其设为错误)

至于僵尸网格算法,基本上你实现了对不在视野中的机器人的LOD剔除。许多引擎已经能够为您完成此操作。例如,所有机器人的皮肤/动画网格都可以在Panda3D中成为机器人外部对象的子项,如果机器人的外部对象被剔除在可见范围之外,则根本没有任何子项被引用。

答案 2 :(得分:1)

如果你喜欢python,那就有Ogre的绑定。查看python-ogre。我已经使用了一点,它似乎足够稳定,可以使用。但是,由于用户群不是那么大,你会遇到偶然的错误。

我对普通C ++ Ogre有更多经验,我喜欢使用它。我认为这不会让你慢下来。看起来你的项目可以扩展到相当大的水平,你需要很多性能来做到这一点。在这种情况下,C ++永远不是一个糟糕的选择。

无论如何,一旦引擎完成,它几乎都是关于脚本的。如果你愿意的话,你可以用高级语言来做。

相关问题