我正在为我的3D引擎编写一个加载器和* .bsp Quake 3文件的渲染器。我支持格式版本46(0x2e)。一切都很好,直到我使用非常简单的地图。简单地图的几何形状在我的引擎和我在互联网上找到的渲染器(http://www.paulsprojects.net/opengl/q3bsp/q3bsp.html)下正确渲染。这是截图:
我尝试使用我的渲染器和我发现的渲染器来渲染更复杂的地图(来自:http://lvlworld.com/)来比较结果。两个渲染器都遇到了一个问题,即场景中有漏洞(这里和那里都缺少三角形)。 我不知道在检查地图时我造成这些问题是什么,它们都是相同的版本。有人遇到过这个问题吗?
编辑:一些非常复杂的地图正确渲染。它让我更加困惑:)。
答案 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++;
}