Не могу отрендерить Quake 3 в формате BSP
Я пишу загрузчик и визуализатор файлов *.bsp Quake 3 для моего 3D-движка. Я поддерживаю формат версии 46 (0x2e). Все отображается хорошо, пока я не использую очень простые карты. Геометрия простых карт отображается правильно как под моим движком, так и под средством визуализации, которое я нашел в Интернете (по адресу http://www.paulsprojects.net/opengl/q3bsp/q3bsp.html). Вот скриншот:
Я пытался рендерить более сложные карты (с http://lvlworld.com/) с помощью своего рендерера и рендера, который я нашел для сравнения результатов. И оба рендерера страдают от проблемы, заключающейся в том, что в сцене есть дыры (пропущенные треугольники здесь и там). Я понятия не имею, что может быть причиной этих проблем, когда я проверял карты, и все они одной и той же версии. Кто-нибудь сталкивался с этой проблемой?
РЕДАКТИРОВАТЬ: некоторые из очень сложных карт отображаются правильно. Это смущает меня еще больше:).
1 ответ
Создатель этого загрузчика 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++;
}