使用转换矩阵时,如何将方向和比例从全局参照系转换为局部参照系?

问题描述

注意:我敢肯定我不是第一个回答这个问题的人。不幸的是,我需要的答案埋在大量的帖子中,询问如何在参考系之间移动坐标以及其他类似但无济于事的问题。

作为正在进行的项目的一部分,我建立了一个Transform对象。正如人们可能期望的那样,这本质上是围绕4x4转换矩阵(和各种基本值)的美化包装,并提供了与位置,方向和比例进行交互的抽象方法,以及为其他实例处理育儿以构建复杂的层次结构。

我目前正在尝试允许用户以全局方式设置和更改子变换的值。位置很简单(如果我做对的话),因为它只涉及将坐标从全局框架或参考转换为局部坐标。

void Transform::setGlobalPosition(const glm::vec3& newPos)
{
    glm::vec4 nlp = glm::vec4(newPos,1.0f);
    if (m_hasParent) {
        // This gets the parent transform from the Entity-Component System.
        auto& p = p_registry->get<Transform>(m_parent);

        nlp = glm::inverse(p.m_globalTransformM) * nlp;
    }

    setPosition(nlp);
}

void Transform::alterGlobalPosition(const glm::vec3& deltaPos)
{
    glm::vec4 nlp = glm::vec4(m_globalPosition + deltaPos,1.0f);
    if (m_hasParent) {
        // This gets the parent transform from the Entity-Component System.
        auto& p = p_registry->get<Transform>(m_parent);

        nlp = glm::inverse(p.m_globalTransformM) * nlp;
    }
        setPosition(nlp);
}

但是,我绝对不知道如何完成以下任务。

// Transform member functions.
void setGlobalScale(const glm::vec3& newScale);
void alterGlobalScale(const glm::vec3& deltaScale);
void setGlobalOrientation(const glm::quat& newOri);
void alterGlobalOrientation(const glm::quat& deltaOri);

位置坐标很简单,但是如何解决旋转和缩放问题呢?任何帮助将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...