美文网首页OpenGL
OpenGL学习 mvp矩阵

OpenGL学习 mvp矩阵

作者: FireStroy | 来源:发表于2020-07-09 00:14 被阅读0次

在OpenGL中 对三围空间的物体进行平移、旋转、缩放需要借助于矩阵的操作。
注意:矩阵的操作先后顺序对最后的结果可能会产生不同的结果。
mvp矩阵
mvp矩阵即模型矩阵,观察矩阵和投影矩阵。
模型矩阵用来从模型坐标系变换到世界坐标系中。
观察变换就是从世界坐标系下变换到观察坐标系下,就是在世界坐标系下设置个观察点(相机位置以及相机方向),然后把世界坐标系下的坐标变换到相机空间。
透视矩阵负责在2D屏幕上显示3D图形效果。把眼睛看到的view平面化到屏幕上。
先实际操作一下:
这里使用的是GLUT

    //2.创建投影矩阵
    viewFrustum.SetPerspective(25.0f, float(w) / float(h), 1.0f, 500.0f);
    projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix());
    transformPipeline.SetMatrixStacks(modelViewMatrix, projectionMatrix);

glutDisplayFunc(reshapeFunc);注册函数中

void reshapeFunc(void){
    …
    modelViewMatrix.PushMatrix();
    //添加照相机矩阵
    M3DMatrix44f mCamera;
    cameraFrame.GetCameraMatrix(mCamera);
    modelViewMatrix.MultMatrix(mCamera);

    //创建mObjectFrame矩阵
    M3DMatrix44f mObjectFrame;
    objectFrame.GetMatrix(mObjectFrame);
    modelViewMatrix.MultMatrix(mObjectFrame);
    //... 绘制函数
    modelViewMatrix.PopMatrix();
    ...
}

移动上下左右键 旋转物体

void SpecialKeys(int key, int x, int y)
{
    if(key == GLUT_KEY_UP)
       objectFrame.RotateWorld(m3dDegToRad(-5.0f), 1.0f, 0.0f, 0.0f);
    if(key == GLUT_KEY_DOWN)
       objectFrame.RotateWorld(m3dDegToRad(5.0f), 1.0f, 0.0f, 0.0f);
    if(key == GLUT_KEY_LEFT)
        objectFrame.RotateWorld(m3dDegToRad(5.0f), 0.0f, 1.0f, 0.0f);
    if(key == GLUT_KEY_RIGHT)
       objectFrame.RotateWorld(m3dDegToRad(-5.0f), 0.0f, 1.0f, 0.0f);
      glutPostRedisplay();
}
让物体旋转

移动上下左右键 让视角移动
为了便于参考 增加地面网格 和一些小球

void SpecialKeys(int key, int x, int y)
{
    if(key == GLUT_KEY_UP)
        cameraFrame.RotateWorld(m3dDegToRad(-5.0f), 1.0f, 0.0f, 0.0f);
    if(key == GLUT_KEY_DOWN)
        cameraFrame.RotateWorld(m3dDegToRad(5.0f), 1.0f, 0.0f, 0.0f);
    if(key == GLUT_KEY_LEFT)
        cameraFrame.RotateWorld(m3dDegToRad(5.0f), 0.0f, 1.0f, 0.0f);
    if(key == GLUT_KEY_RIGHT)
        cameraFrame.RotateWorld(m3dDegToRad(-5.0f), 0.0f, 1.0f, 0.0f);
    glutPostRedisplay();
}

旋转视角

相关文章

网友评论

    本文标题:OpenGL学习 mvp矩阵

    本文链接:https://www.haomeiwen.com/subject/lnphcktx.html