2017-03-16 63 views
0

我已經從攪拌車導入奔馳車模型到OGRE。我正在嘗試旋轉車輪。攪拌車模型一起旋轉車輪轉輪

我有2個要求。像汽車運轉一樣旋轉車輪,並根據方向盤轉動車輪左右旋轉。我可以單獨成功地做到這一點,但是當我一起做時,結果會變得錯誤。

在我從Blender導入模型之前,我根據中心(基於Blender中使用基於3D點光標選項的set Pivot point)爲輪子製作了4個局部樞軸點。

在OGRE中,我導入模型後,我解析了整個場景管理器,並找到了4個輪子節點,並命名爲左前,左後,右前和右後節點。如下所示。

void ogreWindow::makeNodes() 
    { 
    Ogre::SceneNode::ChildNodeIterator it = mSceneMgr->getRootSceneNode()- 
    >getChildIterator(); 
    QString _name; 
while (it.hasMoreElements()) 
{ 
    Ogre::Node* node_ = it.getNext(); 
    Ogre::String _name=node_->getName(); 
    QString ssss = QString::fromUtf8(_name.c_str()); 
    qDebug()<<"Entities are "<<ssss; 
    if(ssss=="WheelRightBack_transform2") 
    { 
     rotateNodeBackWheel_Right = mSceneMgr->getSceneNode("WheelRightBack_transform2"); 
     m_RotateWheeel = true; 
    } 
    if(ssss=="WheelleftBack_transform12") 
    { 
     rotateNodeBackWheel_Left = mSceneMgr->getSceneNode("WheelleftBack_transform12"); 
     m_RotateWheeel = true; 
    } 
    if(ssss=="Wheel_LeftFront_transform15") 
    { 
     rotateNodeFrontWheel_Right = mSceneMgr->getSceneNode("Wheel_LeftFront_transform15"); 
     turnNodeFrontWheel_Right = mSceneMgr->getSceneNode("Wheel_LeftFront_transform15"); 

     m_RotateWheeel = true; 
    } 
    if(ssss=="WheelRightFront_transform3") 
    { 
     rotateNodeFrontWheel_Left = mSceneMgr->getSceneNode("WheelRightFront_transform3"); 
     turnNodeFrontWheel_Left = mSceneMgr->getSceneNode("WheelRightFront_transform3"); 
     m_RotateWheeel = true; 
    } 
} 

} 

然後在framerenderingQueued功能可按,我indefenitely調用旋轉功能如下:

bool ogreWindow::frameRenderingQueued(const Ogre::FrameEvent& fe) 
{ 

        if(m_RotateWheeel) 
          { 
         RotateWheel(); 
          } 
         ....... 
         ....... 
} 

凡rotateWheel()是如下

void ogreWindow::RotateWheel() 
{ 


//Working with Euler rotation 

//Section 1 
if(rotateNodeBackWheel_Left) 
    rotateNodeBackWheel_Left->yaw(Ogre::Radian(0.01),Ogre::Node::TransformSpace::TS_LOCAL); 
if(rotateNodeBackWheel_Right) 
    rotateNodeBackWheel_Right->yaw(Ogre::Radian(0.01),Ogre::Node::TransformSpace::TS_LOCAL); 
if(rotateNodeFrontWheel_Left) 
    rotateNodeFrontWheel_Left->yaw(Ogre::Radian(0.01),Ogre::Node::TransformSpace::TS_LOCAL); 
if(rotateNodeFrontWheel_Right) 
    rotateNodeFrontWheel_Right->yaw(Ogre::Radian(0.01),Ogre::Node::TransformSpace::TS_LOCAL); 

//Section 2 
if(isTurning) 
{ 
    if(rotateNodeFrontWheel_Right) 
     rotateNodeFrontWheel_Right->roll(Ogre::Radian(turningRadius),Ogre::Node::TransformSpace::TS_LOCAL); 

    if(rotateNodeFrontWheel_Right) 
     rotateNodeFrontWheel_Right->roll(Ogre::Radian(turningRadius),Ogre::Node::TransformSpace::TS_LOCAL); 
}  

isTurning = false; 
} 

所以我現在所面臨的問題描述如下,

a)當我單獨做第1部分時,車輪正在旋轉smoo b)當我單獨做第2部分時,車輪將呈現爲轉向 - 好行駛 c)當我將第1部分和第2部分連在一起時,確定它是在車輪旋轉且車輪處於「turnRadius」度(圖片附-A.png) enter image description here

d),但如果我嘗試在運行時改變turnRadius的價值,它是越來越瘋狂。 enter image description here

側視圖是如下 enter image description here

我改變如下turnRadius的值。我從UI中點擊2次來調用這個函數。

void ogreWindow::turnFrontWheelLeft(Ogre::Real radius) 
{ 
//turningRadius-=0.1; 
turningRadius = -0.1; 
isTurning = true; 

} 

void ogreWindow::turnFrontWheelRight(Ogre::Real radius) 
{ 
    //turningRadius+=0.1; 
    turningRadius = 0.1; 
    isTurning = true; 
} 

我明白問題是軸問題。我怎樣才能使它完美?我想做轉彎和旋轉「旋轉」在一起。

希望 Nidhin

+0

我不能創建在OGRE論壇賬號。我註冊後,我沒有收到激活郵件。所以我的希望是堆棧溢出。 –

+0

這裏發佈關於OGRE的問題並沒有錯。不用擔心。 – javaLover

回答