无法呈现Quake 3 bsp格式

时间:2014-03-14 17:36:37

标签: opengl rendering binary-tree file-format quake

我正在为我的3D引擎编写一个加载器和* .bsp Quake 3文件的渲染器。我支持格式版本46(0x2e)。一切都很好,直到我使用非常简单的地图。简单地图的几何形状在我的引擎和我在互联网上找到的渲染器(http://www.paulsprojects.net/opengl/q3bsp/q3bsp.html)下正确渲染。这是截图:

enter image description here

我尝试使用我的渲染器和我发现的渲染器来渲染更复杂的地图(来自:http://lvlworld.com/)来比较结果。两个渲染器都遇到了一个问题,即场景中有漏洞(这里和那里都缺少三角形)。 我不知道在检查地图时我造成这些问题是什么,它们都是相同的版本。有人遇到过这个问题吗?

enter image description here

编辑:一些非常复杂的地图正确渲染。它让我更加困惑:)。

1 个答案:

答案 0 :(得分:2)

这个bsp加载器的创建者做错了什么。我修好了。 只需编辑LoadData函数,并将所有面数据(网格和面片除外)组合成一个数组并进行渲染。对我有用,没有更多"漏洞"。这是一段代码:

int currentFace = 0;

for( int i = 0; i < facesCount; i++ ) {
    if( faceData[i].type != SW_POLYGON )
        continue;

    m_pFaces[i].texture = faceData[i].texture;
    m_pFaces[i].lightmapIndex = faceData[i].lightmapIndex;
    m_pFaces[i].firstVertexIndex = faceData[i].firstVertexIndex;
    m_pFaces[i].vertexCount = faceData[i].vertexCount;
    m_pFaces[i].numMeshIndices = faceData[i].numMeshIndices;
    m_pFaces[i].firstMeshIndex = faceData[i].firstMeshIndex;

    f_bspType[i].faceType = SW_FACE; // Custom one.
    f_bspType[i].typeFaceNumber = currentFace;

    currentFace++;
}