需要帮助组织不同类型的BSP几何渲染

Need help organizing difference in types for BSP geometry rendering

本文关键字:BSP 何渲染 同类型 帮助      更新时间:2023-10-16

我目前正在尝试将另一种格式转换为Quake 3 BSP格式。《Quake》的格式包括垂直、面、索引和纹理。

根据我必须处理的信息:

我有垂直,这是3个浮点结构的x, y和z位置。

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

我有正确的纹理格式。

我的主要问题是:

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

Quake3的BSP格式将所有面表示为三角形(有时被程序员称为"三角形汤")。这对于硬件渲染来说比Quake2的格式更有效,后者的面可以是任意边的多边形(3+顶点)。当所有面都是三角形时,你可以用一个调用绘制多个面,前提是这些面共享相同的材质:

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

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

无论如何,记住这些指标不仅仅是指向顶点块的指标。它们也是漫反射和光贴图通道的纹理坐标索引。