网络世界模拟/ AI沙盒的3D游戏引擎
5年多以前,我一直在玩DirectSound和Direct3D,我发现它非常令人兴奋,尽管用C ++取得一些好成绩需要花费很多时间。 那时我是一名大学生。 现在我主要使用C#和PHP的企业级开发经验,而且我为了生活而努力。 我们国家真的没有机会在严肃的游戏开发中赚钱。 每天越来越多,我发现我错过了一些东西。 所以我决定每天花一个小时左右的时间来编排乐趣。
所以我的想法是建立一个世界模拟。 我想从一些简单的东西开始 - 一些像人类一样的生物 - 像模拟人生3一样简单,只需要基本的需求,基本的动画,最少的图形资源 - 我猜它不会是一座城市,而只是一个城市大房子的开始。 这个想法是有一种服务器应用程序,它将世界上的数据存储在MySQL数据库中,还有一些客户端应用程序 - 无人机的人工智能机器人,它可以模拟移动以及与世界和对方的某些交互。 但是如果没有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几乎不存在文档。 我有0经验与Python,但我听说很容易学习。 如果这将是有趣和具有挑战性的,那么我想我会从另一种编程语言的经验中受益。
您建议采用哪种方式,不是因为高级功能或良好的平台支持,而是主要用于有趣,简单的工作流程和可扩展性,因此我可以创建和集成我需要的所有组件 - 包含数据库的服务器,AI机器人和3D客户端程序?
如果你喜欢python,那么就有Ogre的绑定。 看看python-oogre。 我已经使用它一点,它似乎足够稳定,可以使用。 但是,由于用户群不是那么大,您会遇到偶尔的错误。
我有更多使用纯C ++ Ogre的经验,我喜欢使用它。 我不认为这会让你失望太多。 它看起来像你的项目可以扩展到一个很大的水平,你需要很多的性能来做到这一点。 在这种情况下,C ++永远不是一个不错的选择。
无论如何,一旦引擎完成,它几乎都是关于脚本的。 如果你愿意,你可以用高级语言来做到这一点。
我只使用XNA,所以我不能真正给你一个与其他人做比较的好东西。 我会说,虽然XNA只是一个框架,但TorqueX 3D是一个引擎。 当您注册开发XNA($ 100 /年)时,您可以访问TorqueX 2D和3D引擎二进制文件。
我没有使用过3D引擎,但我使用了2D引擎。 我会说关于API的文档可能有点稀疏,但是他们有一些非常好的入门教程和一个相当有用的和活跃的论坛,用于解答本教程未回答的问题。
你对C#的使用经验显然会非常方便。 但是,您必须坚持使用Windows开发,因为您无法访问Xbox 360上的网络堆栈(或数据库)。
一旦我完成了教程并习惯了Torque的风格,我发现与它合作非常有趣。 添加对象/行为非常容易。 XNA框架的最新版本对声音的支持已经得到改进,并且变得非常简单。 它有一个很好的2D编辑器,我认为3D编辑器也很好(没有真正尝试过)来帮助你开始创建关卡。 我想它在网络/数据库部门缺乏,你必须使用标准的.NET的东西或引入其他库来处理。
我认为无论如何都要看看它,并将其与其他人进行比较是值得的。 我相信,如果您想要玩XNA,即使没有注册XNA,也可以免费下载(30天)试用版。 祝你好运!
Panda3D看起来很有前途,因为它有一种在运行时修改网格的方法(这个功能缺乏,bug很多,或者很难在很多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让我们可以防止未定义的顶点(即:一致性)相关问题,所以不妨使用它。 如果在您的情况下删除具有已删除顶点的所有三角形是可接受的,请将“限制”更改为“级联”(限制会使用使用它的三角形删除顶点时出现错误)
至于机器人网格算法,基本上你正在为不在视图中的机器人实现LOD剔除。 已经有很多引擎已经可以为你做这个了。 例如,所有机器人的剥皮/动画网格都可以让孩子们在Panda3D中使用机器人的外部对象,并且如果机器人的外部对象被淘汰出可视范围,则根本没有任何孩子被引用。
链接地址: http://www.djcxy.com/p/17103.html上一篇: 3D game engine for networked world simulation / AI sandbox