问题描述
在我的3D应用程序中,我有一个Object3D类,该类在创建时就是边界框,该边界框是一个简单的长方体,具有最小和最大点:
但是,当我翻译Object3D时,我想使用对象的模型矩阵来更新边界框:
BoundingBox& TransformBy(const glm::mat4& modelMatrice){
//extract position of my model matrix
glm::vec3 pos( modelMatrice[3] );
//extract scale of my model matrix
glm::vec3 scale( glm::length(glm::vec3(modelMatrice[0])),glm::length(glm::vec3(modelMatrice[1])),glm::length(glm::vec3(modelMatrice[2])));
//Creating vec4 min/max from vec3
glm::vec4 min_(min.x,min.y,min.z,1.0f);
glm::vec4 max_(max.x,max.y,max.z,1.0f);
//Inverting the matrice to multiply my vec4 with it in order to rotate my min max
glm::mat4 inverse = glm::inverse(modelMatrice);
min_ = min_ * inverse;
max_ = max_ * inverse;
//Scale my min_ max_
min_ *= glm::vec4(scale,1.0f);
max_ *= glm::vec4(scale,1.0f);
//adding model matrice translation to min_ and max_
min_ += glm::vec4(pos,0.0f);
max_ += glm::vec4(pos,0.0f);
//Redefining max and min
max = glm::vec3( (min_.x > max_.x)? min_.x:max_.x,(min_.y > max_.y)? min_.y: max_.y,(min_.z > max_.z)? min_.z : max_.z);
min = glm::vec3( (min_.x < max_.x)? min_.x:max_.x,(min_.y < max_.y)? min_.y: max_.y,(min_.z < max_.z)? min_.z : max_.z);
return *this;
}
这是我调用TransformBy函数的方式:
box.TransformBy(transform.GetModelMatrix());
由于某种原因,它会使我的最小点和最大点正确旋转,也会平移它,但是我的缩放比例未正确应用,这使我的边界框的缩放比例大于3D对象。
为什么我的缩放无法正常工作? 也许有一种不太复杂的方式来做我想做的事?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)