OpenGl的新手我试图确保我做的这一部分是正确的,我告诉他从位置,缩放和旋转信息构建世界矩阵。
从我在网上找到的材料我的理解是
p ^ world = p ^ world * p ^ Model
P ^ Model = Scaling * Rotation * Translation
因此我编码了以下内容:
glm::mat4 Model::GetWorldMatrix() const
{
// @TODO 2, you must build the world matrix from the position, scaling and rotation informations
glm::mat4 pModel = GetScaling() * GetRotationAngle() * GetPosition();
glm::mat4 worldMatrix(1.0f);
worldMatrix = worldMatrix* pModel;
// @TODO 4 - Maybe you should use the parent world transform when you do hierarchical modeling
return worldMatrix;
}
void Model::SetPosition(glm::vec3 position)
{
mPosition = position;
}
void Model::SetScaling(glm::vec3 scaling)
{
mScaling = scaling;
}
void Model::SetRotation(glm::vec3 axis, float angleDegrees)
{
mRotationAxis = axis;
mRotationAngleInDegrees = angleDegrees;
}
这是对的吗?感谢您的时间和帮助。
答案 0 :(得分:4)
这样做的方法是为每个模型保存一个4x4矩阵。该矩阵虽然称为ModelMatrix。
对象的所有重要信息(位置,旋转,比例)都保存在此矩阵中。如果要平移,旋转或缩放对象,可以生成变换矩阵,并将其从左侧乘以模型矩阵。 model = trafo * model;
您可以使用GLM http://glm.g-truc.net/0.9.2/api/a00245.html生成这些转换矩阵。