-1

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

在此处输入图像描述

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

在此处输入图像描述

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

4

1 回答 1

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++;
}
于 2014-11-22T17:17:51.780 回答