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

...

}

...

}

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

回答:

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

以上是 OpenGL利用GML库对模型进行旋转的相关问题。 的全部内容, 来源链接: utcz.com/p/193008.html

回到顶部