需要帮助组织 BSP 几何渲染的类型差异

Posted

技术标签:

【中文标题】需要帮助组织 BSP 几何渲染的类型差异【英文标题】:Need help organizing difference in types for BSP geometry rendering 【发布时间】:2011-04-26 00:38:21 【问题描述】:

我目前正在尝试将另一种格式转换为 Quake 3 BSP 格式。 Quake 格式包括顶点、面、标记和纹理。

根据我必须使用的信息:

我有顶点,它们是 x、y 和 z 位置的 3 个浮点结构。

我有我可以假设是面的多边形。多边形都是三角形的,并且是对顶点索引和纹理的引用。

我的纹理格式正确。

我的主要问题是:

    BSP 格式的面是否等同于多边形? 什么是 BSP 格式的索引?它们是指向顶点还是更多?

【问题讨论】:

【参考方案1】:

Quake3 的 BSP 格式将所有面表示为三角形(程序员有时称为“三角形汤”)。这比 Quake2 的格式更高效,因为 Quake2 的面可以是任意边的多边形(3 个以上的顶点)。当所有面都是三角形时,您可以通过一次调用绘制多个面,前提是这些面共享相同的材质:

glDrawArrays(GL_TRIANGLES, first_face->index, num_faces);

与 Quake2 相比,这种几何批处理产生了大量的性能改进,因为每个面可能有不同数量的顶点,面不能集中到单个绘制操作中:您必须改为调用 glDrawArrays(或更糟糕的是,glVertex3f 在循环中)用于每个多边形。这个关键区别就是为什么 Quake3 的环境可以包含 10 倍于 Quake2 的复杂性。

无论如何,请记住,索引不仅仅是顶点块的索引。它们也是漫反射和光照贴图通道的纹理坐标的索引。希望这会有所帮助。

【讨论】:

以上是关于需要帮助组织 BSP 几何渲染的类型差异的主要内容,如果未能解决你的问题,请参考以下文章

Three.js - 仅渲染场景背景但不渲染几何图形

Three.js-仅渲染场景背景,但不渲染几何图形

如何管理和组织动态和静态几何

三维渲染引擎设计与实践

Linux OpenGL 实践篇-14-多实例渲染

问题理解 CALayer 几何。需要帮助