gpt4 book ai didi

c++ - 旋转对象 AABB 更新不正确

转载 作者:行者123 更新时间:2023-11-30 04:44:50 24 4
gpt4 key购买 nike

旋转物体时,围绕腿的 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

最佳答案

是否完全是由于未能旋转初始最小/最大位置造成的?

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);

关于c++ - 旋转对象 AABB 更新不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57550535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com