【问题标题】:Blender Car Model Rotate wheel turn wheel together搅拌机汽车模型一起转动轮子转动轮子
【发布时间】:2017-03-16 12:45:50
【问题描述】:

我已将一辆奔驰汽车模型从 Blender 导入到 OGRE。我正在尝试旋转轮子。

我有两个要求。像汽车行驶一样转动车轮,根据方向盘左右转动车轮。我可以单独成功地做到这一点,但是当我一起做时,我得到了错误的结果。

在从 Blender 导入模型之前,我基于中心为车轮制作了 4 个局部枢轴点(在 Blender 中使用基于 3D 点光标的设置枢轴点选项)。

在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 函数中,我不明确地调用如下旋转函数:

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 部分时,轮子平稳地转动 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;
 }

我知道问题是轴问题。我怎样才能使它完美?我想一起转弯并旋转“旋转”。

【问题讨论】:

  • 我无法在 OGRE 论坛中创建帐户。注册后我没有收到激活邮件。所以我希望堆栈溢出。
  • 在这里发一个关于OGRE的问题并没有错。不用担心。

标签: rotation ogre


【解决方案1】:

它现在正在工作。我创建了子节点并分别进行了转换。

http://www.ogre3d.org/forums/viewtopic.php?f=1&t=92364&sid=e21b8189a3defe7ae1c3c4c3b7c4cc57

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多