OpenGL模型变换平移、缩放、旋转注意事项

一、概述

  在OpenGL中,想要对物体(模型)进行操作,如:平移、缩放、旋转。其顺序不能错,不同的顺序会给出不同的结果

  网上的博客大家看过后要慎重使用,好多都是错误的,在实际项目中使用前最好先写demo进行验证,不然一旦整合到项目中,排错成本将会非常高。

  三者的顺序是:

    理论:先缩放、再旋转、然后平移

    实际:平移*旋转*缩放。ps:实际和理论是相反的,这个和projection*view*model是类似的。

  下面是一个简单的样例:将立方体平移到屏幕右下角。

  ps:物体的顶点坐标系是在-1.0~1.0之间。

  四个角的坐标分别为:

    右上角:(1.0f,1.0f)

    右下角:(1.0f,-1.0f)

    左下角:(-1.0f,-1.0f)

    左上角:(-1.0f,1.0f)

  所以物体变换的时候也是在--1.0f~1.0f区域变换

二、代码示例

  float scale = (float) mWidth / (float) mHeight;
    LOGE("scale:%f",0.5f/scale);

    glm::mat4 model = glm::mat4(1.0f);
    ///旋转、平移、缩放顺序不能反了
    model = glm::translate(model, glm::vec3(0.5f, -0.5f/scale, 0.0f));
    model = glm::rotate(model, 45.0f, glm::vec3(0.5f, 1.0f, 0.5f));
    model = glm::scale(model, glm::vec3(0.1f));

 

posted on 2024-10-18 11:44  飘杨......  阅读(20)  评论(0编辑  收藏  举报