我已經從攪拌車導入奔馳車模型到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)
d),但如果我嘗試在運行時改變turnRadius的價值,它是越來越瘋狂。
我改變如下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
我不能創建在OGRE論壇賬號。我註冊後,我沒有收到激活郵件。所以我的希望是堆棧溢出。 –
這裏發佈關於OGRE的問題並沒有錯。不用擔心。 – javaLover