问题描述
注意:我敢肯定我不是第一个回答这个问题的人。不幸的是,我需要的答案埋在大量的帖子中,询问如何在参考系之间移动坐标以及其他类似但无济于事的问题。
作为正在进行的项目的一部分,我建立了一个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 (将#修改为@)