2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2025-11-23 05:12:05 +00:00

Moved coordinate conversion to BSP creator instead of the BSP linker, and added a console print of the maximum number of objects in a collision leaf.

This commit is contained in:
LJW-Dev
2025-11-04 15:09:00 +08:00
parent e88f064172
commit e4f6e195f6
4 changed files with 13 additions and 5 deletions

View File

@@ -91,9 +91,11 @@ namespace
uint32_t index = tempIndices[idxOfIndex];
ufbx_vec3 transformedPos = ufbx_transform_position(&meshMatrix, ufbx_get_vertex_vec3(&mesh->vertex_position, index));
vertex.pos.x = static_cast<float>(transformedPos.x);
vertex.pos.y = static_cast<float>(transformedPos.y);
vertex.pos.z = static_cast<float>(transformedPos.z);
vec3_t blenderCoords;
blenderCoords.x = static_cast<float>(transformedPos.x);
blenderCoords.y = static_cast<float>(transformedPos.y);
blenderCoords.z = static_cast<float>(transformedPos.z);
vertex.pos = BSPUtil::convertToBO2Coords(blenderCoords);
if (surface.material.materialType == MATERIAL_TYPE_TEXTURE || surface.material.materialType == MATERIAL_TYPE_EMPTY)
{

View File

@@ -218,6 +218,9 @@ namespace BSP
assert(objectCount > 0);
if (objectCount > highestLeafObjectCount)
highestLeafObjectCount = objectCount;
// add the parent AABB node
vec3_t parentMins;
vec3_t parentMaxs;
@@ -456,6 +459,8 @@ namespace BSP
// The plane of each node have the same index
for (size_t nodeIdx = 0; nodeIdx < nodeVec.size(); nodeIdx++)
clipMap->nodes[nodeIdx].plane = &clipMap->info.planes[nodeIdx];
con::info("Highest leaf object count: {}", highestLeafObjectCount);
}
bool ClipMapLinker::loadPartitions(clipMap_t* clipMap, BSPData* bsp)
@@ -471,7 +476,7 @@ namespace BSP
clipMap->vertCount = static_cast<unsigned int>(bsp->colWorld.vertices.size());
clipMap->verts = m_memory.Alloc<vec3_t>(clipMap->vertCount);
for (unsigned int vertIdx = 0; vertIdx < clipMap->vertCount; vertIdx++)
clipMap->verts[vertIdx] = BSPUtil::convertToBO2Coords(bsp->colWorld.vertices[vertIdx].pos);
clipMap->verts[vertIdx] = bsp->colWorld.vertices[vertIdx].pos;
// The clipmap index buffer has a unique index for each vertex in the world, compared to the gfxworld's
// index buffer having a unique index for each vertex on a surface. This code converts gfxworld indices to clipmap indices.

View File

@@ -30,6 +30,7 @@ namespace BSP
std::vector<cNode_t> nodeVec;
std::vector<cLeaf_s> leafVec;
std::vector<CollisionAabbTree> AABBTreeVec;
size_t highestLeafObjectCount = 0;
int addAABBTreeFromLeaf(BSPTree* node, clipMap_t* clipMap);
int16_t loadBSPNode(clipMap_t* clipMap, BSPTree* tree);
void loadBSPTree(clipMap_t* clipMap, BSPData* bsp);

View File

@@ -23,7 +23,7 @@ namespace BSP
BSPVertex& bspVertex = bsp->gfxWorld.vertices.at(vertIdx);
GfxPackedWorldVertex* gfxVertex = &vertexBuffer[vertIdx];
gfxVertex->xyz = BSPUtil::convertToBO2Coords(bspVertex.pos);
gfxVertex->xyz = bspVertex.pos;
gfxVertex->color.packed = pack32::Vec4PackGfxColor(bspVertex.color.v);
gfxVertex->texCoord.packed = pack32::Vec2PackTexCoordsUV(bspVertex.texCoord.v);
gfxVertex->normal.packed = pack32::Vec3PackUnitVecThirdBased(bspVertex.normal.v);