新的PrimitiveComponent::GetWorldOBBMatrix函数,进一步减少中间计算步骤,直接出OBBMATRIX

This commit is contained in:
2025-07-09 00:45:03 +08:00
parent c99157e0e5
commit 51e043f07d
3 changed files with 35 additions and 7 deletions

View File

@@ -31,6 +31,34 @@ public:
return true;
}
const bool GetWorldOBBMatrix(Matrix4f &obb_matrix,const float cube_size=1.0f)
{
AABB aabb;
if(!GetLocalAABB(aabb))
return false;
//这两行也是对的
//OBB obb(GetLocalToWorldMatrix(),aabb);
//obb_matrix=obb.GetMatrix(cube_size);
// 1. 计算最终的缩放向量
const Vector3f scale_vector = aabb.GetLength() * cube_size;
// 2. 直接构建局部空间的变换矩阵 (Translate * Scale)
Matrix4f local_aabb_matrix;
local_aabb_matrix[0] = Vector4f(scale_vector.x, 0.0f, 0.0f, 0.0f);
local_aabb_matrix[1] = Vector4f(0.0f, scale_vector.y, 0.0f, 0.0f);
local_aabb_matrix[2] = Vector4f(0.0f, 0.0f, scale_vector.z, 0.0f);
local_aabb_matrix[3] = Vector4f(aabb.GetCenter(), 1.0f);
// 3. 将局部 AABB 矩阵与组件的 LocalToWorld 矩阵相乘,得到最终的世界 OBB 矩阵
obb_matrix = GetLocalToWorldMatrix() * local_aabb_matrix;
return(true);
}
};//class PrimitiveComponent
COMPONENT_NAMESPACE_END