鍍金池/ 問答/C++  網(wǎng)絡(luò)安全/ OpenGL利用GML庫對模型進(jìn)行旋轉(zhuǎn)的相關(guān)問題。

OpenGL利用GML庫對模型進(jìn)行旋轉(zhuǎn)的相關(guān)問題。

我用OpenGL的Assimp庫加載MAYA建的汽車模型,然后想利用glm::rotate();函數(shù)讓車輪自轉(zhuǎn),可是當(dāng)使用了這個函數(shù)對Model矩陣進(jìn)行變化之后,車輪在自轉(zhuǎn)的同時,還總會圍繞這一個點做圓周運動。這是為什么?如何能讓車輪自轉(zhuǎn)?求大神解答。

// 加載左前方車輪,并設(shè)置初始位置
    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; // 對小車左前輪進(jìn)行變換
            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);
            ...
        }
        ...
    }

運行效果如下圖:
圖片描述

回答
編輯回答
雨蝶

首先要確保車輪的模型坐標(biāo)原點是不是中心,如果不是中心,可以先平移到原點再進(jìn)行旋轉(zhuǎn)或者干脆在建模軟件種編輯修正模型的坐標(biāo)位置。另外我記得glm的translate、rotate和scale是用的右乘的方式實現(xiàn)的,所以需要反過來,這一點你上面應(yīng)該沒錯。多半是模型坐標(biāo)的問題。

2018年5月18日 00:21