应用世界变换

时间:2014-07-13 19:15:55

标签: c++ opengl

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;
}

这是对的吗?感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:4)

这样做的方法是为每个模型保存一个4x4矩阵。该矩阵虽然称为ModelMatrix。

对象的所有重要信息(位置,旋转,比例)都保存在此矩阵中。如果要平移,旋转或缩放对象,可以生成变换矩阵,并将其从左侧乘以模型矩阵。 model = trafo * model;您可以使用GLM http://glm.g-truc.net/0.9.2/api/a00245.html生成这些转换矩阵。