翻译矢量

时间:2014-11-27 20:21:32

标签: c++ graphics linear glm-math

我正在尝试实现碰撞检测的边界框。为了移动max和min x,y和z值,我存储它们的原始模型空间坐标,然后,每次它们的位置改变时,我将这些坐标乘以一个平移矩阵,并将结果存储为当前的最大值和最小值。但是这些值没有正确更新。

代码是:

void BoundingBox::softUpdate(const glm::vec3 position)
{
    glm::vec4 newMin = glm::translate(glm::mat4(), position) * glm::vec4(originalMin.x, originalMin.y, originalMin.z, 1);
    min = glm::vec3(newMin.x, newMin.y, newMin.z);

    glm::vec4 newMax = glm::vec4(originalMax, 1) * glm::translate(glm::mat4(), position);
    max = glm::vec3(newMax.x, newMax.y, newMax.z);
}

其中originalMaxoriginalMinglm::vec3 s,代表模型空间坐标。 minmax也是glm::vec3,并存储当前,已翻译,最小和最大x,y和z值。

编辑:要求确定最小值和最大值的代码:

void BoundingBox::calculateMaxAndMins(const std::vector<glm::vec3> vertices)
{
    originalMax.x = vertices.at(0).x;
    originalMin.x = vertices.at(0).x;

    originalMax.y = vertices.at(0).y;
    originalMin.y = vertices.at(0).y;

    originalMax.z = vertices.at(0).z;
    originalMin.z = vertices.at(0).z;

    for (glm::vec3 vertex : vertices)
    {
        if (vertex.x > originalMax.x) originalMax.x = vertex.x;
        if (vertex.x < originalMin.x) originalMin.x = vertex.x;

        if (vertex.y > originalMax.y) originalMax.y = vertex.y;
        if (vertex.y < originalMin.y) originalMin.y = vertex.y;

        if (vertex.z > originalMax.z) originalMax.z = vertex.z;
        if (vertex.z < originalMin.z) originalMin.z = vertex.z;
    }

0 个答案:

没有答案