在游戏中存储3D模型的最佳方法是什么? 我在矢量中存储: 矢量三角形(每个三角形包含texcords的数量,顶点的数量和法线的数量), 矢量点; vector normals; 矢量texCords;在游戏中存储3D模型,最好的方法
回答
在这种情况下,我不确定什么构成“最好的方法”,因为这将取决于情况,在您的问题中,它有些开放性的解释。
如果您正在讨论如何快速呈现静态对象,您可以使用Display Lists进行很长的路要走。它们可以用于所有OpenGL调用一次,然后回想那些指令以在游戏中使用时呈现对象。所有用于计算顶点位置,法线等的开销只会在构建每个显示列表时执行一次。缺点是如果你的模型经常变化,你不会看到太多的性能增益。
编辑:SurvivalMachine下面提到显示列表已被弃用。特别是,它们在OpenGL 3.0版中被弃用,并且完全从版本3.1中的标准中移除。经过一些研究,似乎Vertex Buffer Object(VBO)扩展是首选的替代方案,尽管我发现许多来源声称性能不如显示列表。
显示列表已被弃用。 – SurvivalMachine 2010-05-29 13:45:44
@SurvivalMachine:我不知道。自从我做了任何grpahics编程已经有一段时间了。感谢您的提醒;我已经更新了我的答案。 – andand 2010-05-29 20:09:10
在我看来,与显示列表相比,VBO的性能取决于视频卡。我也做了一些搜索,几次讨论已经过去了几年,并且指出当时的“新”卡开始看到维也纳国际组织的表现比DL更高。无论如何,显示列表的弃用是(IMO)远离它们的充分理由,更不用说在DirectX中没有相同的显示列表,所以如果您想要抽象引擎以允许DirectX支持您将不得不转移到顶点数组或维也纳组织。 – Ricket 2010-05-30 00:14:22
我选择从.ms3d格式导入模型,虽然稍后可能会重构,但我认为它为我的3D模型的数据结构提供了一个体面的基础。
spec(C头格式)是一个非常简单的读取;我用Java编写我的游戏,所以我简单地移植了每个数据结构:顶点,三角形,组,材质以及可选的骨架动画元素。
但是真的,模型只是顶点(或三角形)的三元组,每个顶点都有一个材质,对吧?首先创建这些基本结构,编写一个绘制函数,为参数提取一个模型并绘制它,然后添加您需要的任何其他功能。迭代设计,如果你愿意的话。
现在我将我的三角形存储在std :: vector上,但它工作得很慢:/ 我必须存储在std :: vector上,beacouse我检查与它们的碰撞,有没有更好的方法然后向量? – piotrek 2010-05-30 12:31:52
我会使用一个常规数组。std :: vector会有开销,因为它意味着要容纳经常改变的数据结构;但由于您只需加载一次数据,并且您应该能够知道(或弄清楚)需要存储多少个三角形,因此不需要矢量的额外功能。如果你真的想要,你可以加载到矢量中,然后在加载后将其复制到数组中。无论如何,循环访问数组可能会为您提供所需的额外速度。 – Ricket 2010-05-30 16:01:04
还要确保你正在进行更有效的碰撞,而不是仅仅检查每帧所有三角形的碰撞。你应该做更高层次的事情,比如边界框检查,甚至是大场景中的四叉树/八叉树,只有那些测试是真实的,那么你应该深入到只有碰撞网格的三角形。 – Ricket 2010-05-30 16:15:47
- 1. 最好的iPhone 3D游戏引擎
- 2. 在C++游戏中存储所有实体的最佳方法
- 3. 最好的方法 - iPhone游戏
- 4. 最好的方式来存储琐事游戏数据?
- 5. 最好的存储方法
- 6. 在Rails中建模游戏匹配的好方法?
- 7. Android的3D游戏,模型和模型动画
- 8. 在WPF中将XNA游戏与3D模型集成
- 9. 在Android的3D游戏
- 10. 手动加载游戏中角色模型的推荐3D模型类型?
- 11. 使用类方法在Python游戏中存储用户值
- 12. 存储大型2D游戏世界
- 13. 哪种解决这种游戏最好的方法是?
- 14. 存储2D游戏地图的最佳方式
- 15. 存储游戏数据的最佳方式是什么?
- 16. App Engine数据存储模型的排名4人游戏
- 17. 3D游戏几何
- 18. 在XNA之外加载3D模型游戏类
- 19. 最好的方法来存储三种类型的位?
- 20. 在Java中编程的3D游戏
- 21. 未定义的方法`你好”为游戏化::用户:模块
- 22. 在iOS游戏中播放声音的最方便方法?
- 23. 如何让我的3ds Max模型进入iPhone 3D游戏?
- 24. 最好的方法来存储服务器端的Java多层自上而下的游戏数据
- 25. Flash游戏数据存储
- 26. 游戏数据存储
- 27. Facebook的Flash游戏数据存储方法
- 28. 拼字游戏 - 最好的举动
- 29. 保存等距游戏数据的最有效方法
- 30. 最好的方法来缓存存储在C字典#
“在游戏中存储3D模型?”:您正在谈论的是:内存存储(正在使用时)还是磁盘存储(游戏安装后)? – SigTerm 2010-05-29 01:07:25
最好的方法完全取决于你的游戏。如果你目前的格式适用于你的游戏,那就去做吧。如果你在谈论文件格式,那么你可以使用一些标准格式,比如这里提到的一些标准格式(http://stackoverflow.com/questions/585769/recommended-3d-model-type-游戏人物角色模型加载手动)和[这里](http://stackoverflow.com/questions/1488579/3d-model-format-for-games)。 – 2010-05-29 01:08:01