Не могу отрендерить 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++;
}
Другие вопросы по тегам