在游戏中存储3d模型,最好的方法

时间:2010-05-29 00:36:57

标签: opengl 3d

在游戏中存储3D模型的最佳方法是什么? 我存储在矢量中: 矢量三角形(每个三角形包含texcords数,顶点数和正常数), 矢量点; 矢量法线; 矢量texCords;

2 个答案:

答案 0 :(得分:3)

我不确定在这种情况下什么构成“最好的方法”,因为这将取决于情况,而在你的问题中,它对解释有点开放。

如果您正在谈论如何快速渲染静态对象,您可以使用Display Lists大做多远。它们可用于memoize所有OpenGL调用一次,然后调用这些指令,以便在游戏中使用时呈现对象。在构建每个显示列表时,您只需执行一次计算顶点位置,法线等所需的所有开销。缺点是,如果您的模型经常更改,您将不会看到很多性能提升。

编辑: SurvivalMachine下面提到不推荐使用显示列表。特别是,它们在OpenGL 3.0版中已被弃用,并完全从版本3.1中的标准中删除。经过一些研究后,似乎Vertex Buffer Object(VBO)扩展是首选的替代方案,尽管我发现许多来源声称性能不如显示列表。

答案 1 :(得分:0)

我选择从.ms3d格式导入模型,虽然我可能稍后重构,但我认为它为我的3D模型的数据结构提供了一个不错的基础。

spec(以C标头格式)是一个非常简单的阅读;我用Java编写游戏,所以我简单地移植了每个数据结构:顶点,三角形,组,材料和骨架动画元素。

但实际上,模型只是顶点(或三角形)的三元组,每个都有一个材料,对吗?首先创建这些基本结构,编写一个绘制函数,该函数接受参数的模型并绘制它,然后根据需要添加您可能需要的任何其他功能。迭代设计,如果你愿意的话。