OpenGL利用GML库对模型进行旋转的相关问题。

我用OpenGL的Assimp库加载MAYA建的汽车模型,然后想利用glm::rotate();函数让车轮自转,可是当使用了这个函数对Model矩阵进行变化之后,车轮在自转的同时,还总会围绕这一个点做圆周运动。这是为什么?如何能让车轮自转?求大神解答。

// 加载左前方车轮,并设置初始位置
    Model wheel_1(getFullPath("car_model\\car_wheel_left_1.obj").c_str());
    wheel_1.xPos = -1.75f;
    wheel_1.yPos = 0.0f;
    wheel_1.zPos = 0.0f;
    wheel_1.ModelPosition = glm::vec3(wheel_1.xPos, wheel_1.yPos, wheel_1.zPos);
    ...
    void main(){
        ...
        while{
            ...
            // 左前轮
            glm::mat4 model_1; // 对小车左前轮进行变换
            model_1 = glm::translate(model_1, wheel_1.ModelPosition);
            model_1 = glm::rotate(model_1, glm::radians(1.0f)*i, glm::vec3(1.0f, 0.0f, 0.0f));
            model_1 = glm::scale(model_1, glm::vec3(0.2f, 0.2f, 0.2f));
            //model_1 = glm::translate(model_1, wheel_1.ModelPosition);
            ourShader.setMat4("model", glm::value_ptr(model_1)); // ourShader是定义的着色器
            wheel_1.Draw(ourShader);
            ...
        }
        ...
    }

运行效果如下图:
图片描述

阅读 4.9k
1 个回答

首先要确保车轮的模型坐标原点是不是中心,如果不是中心,可以先平移到原点再进行旋转或者干脆在建模软件种编辑修正模型的坐标位置。另外我记得glm的translate、rotate和scale是用的右乘的方式实现的,所以需要反过来,这一点你上面应该没错。多半是模型坐标的问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题