当旋转物体时,围绕腿的AABB不会随着腿移动。相反,它们相对于物体停留在相同的位置,只是简单地增加尺寸以保持腿在AABB中,而不是随着腿移动。这是由于这些AABB中的每一个具有相同的位置,这是主对象本身的位置。
让我们假设下面的代码被称为每一帧,是否有可能让这些AABB正确跟随。(我不是要求AABB完美地随着腿旋转,我知道它们不能,因为它们是AABB,但我只想让位置正确地停留在腿周围)
//Clear old AABBs
obj->ClearSecondaryAABBs();
glm::mat4 rotMat = obj->GetRotationMatrix();
glm::vec3 scale = obj->GetScale();
//Calc min max for each mesh
for (auto&& mesh : tempObj->GetMeshes())
{
glm::vec3 min = mesh.Vertices[0].Position * scale;
glm::vec3 max = mesh.Vertices[0].Position * scale;
glm::vec3 v;
for (size_t i = 0; i < mesh.Vertices.size(); i++)
{
v = mesh.Vertices[i].Position * scale;
v = rotMat * glm::vec4(v, 1);
CalculateMinMax(v, min, max);
}
// create new aabb
AABB* newBox = new AABB(min, max);
newBox->min += obj->GetPosition();
newBox->max += obj->GetPosition();这是一个问题的视频,希望你能看到发生了什么,主要是看看腿的AABB做了什么https://www.youtube.com/watch?v=B__1pLnjv7k
发布于 2019-08-19 12:45:14
这是不是因为未能旋转初始的最小/最大位置而导致的?
glm::vec3 min = mesh.Vertices[0].Position * scale;
glm::vec3 max = mesh.Vertices[0].Position * scale;
min = rotMat * glm::vec4(min, 1);
max = rotMat * glm::vec4(max, 1);https://stackoverflow.com/questions/57550535
复制相似问题