cocos2d-x 3.2 三维坐标系统和3d模型的疑问

这几天在看cocos2d-x 3.2的3d模型,有些不懂的地方上来问问。:10: :10: :10:

1、如图,5架飞机除了位置参数不一样,其他参数都一样为什么看上去的方向不一样了。

//创建中间的飞机
void HelloWorld::addBoss(Vec2 p){
    m_sprite = Sprite3D::create("Sprite3D/boss.obj");
    m_sprite->setScale(10.f);
    m_sprite->setTexture("Sprite3D/boss.png");
    m_sprite->setPosition( Vec2( p.x, p.y) );
    this->addChild( m_sprite );
    //在不同位置方向会有区别
    addOtherBoss(Vec2(15,0),0);
    addOtherBoss(Vec2(15,-15),5);
    addOtherBoss(Vec2(-15,15),-5);
    addOtherBoss(Vec2(-15,-15),0);
}
//创建周围的飞机
void HelloWorld::addOtherBoss(Vec2 pos,int order){
    auto sprite = Sprite3D::create("Sprite3D/boss.obj"); 
    sprite->setTexture("Sprite3D/boss.png");
    sprite->setPosition( Vec2( pos.x, pos.y) );
    m_sprite->addChild( sprite );
}

```

  



2、理解不了三维的坐标系统。我知道右手坐标和cocos2d-x的坐标,但是3d的坐标系统好像不一样啊。

对3d模型进行旋转180后执行逆动作回到初始状态:
    在初始状态下做的旋转似乎没问题
          绕x轴旋转
   
         绕y轴旋转
  
        绕z轴旋转(根据右手坐标,z轴应该是逆时针旋转吧。)
  
    但是我先对飞机做旋转,再让他执行旋转动作时就不对了。
       绕x轴旋转
  
      绕y轴旋转
  
    绕z轴旋转
  
   x轴的方向跟着模型旋转了,y轴和z轴都没有:10:  :10:    :3:   
   完全就凌乱了。

另外附上我的代码
 Sprite3D.zip (1538 KB) 



第一个问题解决,可以参考这里http://xiaofei1990.blog.51cto.com/2648485/1243812

感谢一楼lion

恭喜LZ,已经进入3D世界。

1、3D世界有两种相机,一种是正交,一种是透视,你刚好看到的是透视的。可以在director里面改成正交的,你就可以看到屏幕周围不变形的飞机了。

2、绕坐标轴旋转,这个在研究一下问题。

— Begin quote from ____

引用第1楼lion于2014-07-30 17:19发表的 :
恭喜LZ,已经进入3D世界。

1、3D世界有两种相机,一种是正交,一种是透视,你刚好看到的是透视的。可以在director里面改成正交的,你就可以看到屏幕周围不变形的飞机了。

2、绕坐标轴旋转,这个在研究一下问题。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=217691&pid=1017095

— End quote

感谢lion第一个问题解决了

第二个问题我觉得是我理解上有问题:12:
我继续研究一下。3D的世界好纠结。

— Begin quote from ____

引用第1楼lion于2014-07-30 17:19发表的 :
恭喜LZ,已经进入3D世界。

1、3D世界有两种相机,一种是正交,一种是透视,你刚好看到的是透视的。可以在director里面改成正交的,你就可以看到屏幕周围不变形的飞机了。

2、绕坐标轴旋转,这个在研究一下问题。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=217691&pid=1017095

— End quote

改成正交视图后,加了这句代码,x和z的旋转就都变成这样了。

//所有飞机绕y轴旋转90°
m_sprite->setRotation3D(Vec3(0,90,0));


```

 
这是x轴和z轴重合了吗

m_sprite->setRotation3D(Vec3(0,90,0));相当于坐标系旋转了,X和Z会交换了,所以旋转Action也跟着变了。

正常情况应该是交换了,现在好像没有交换,只有x轴旋转了。 :2:
怎样把人@进来呢 @偶尔e网事

setRotation3D的源码
_rotationZ_X是什么意思
Z轴被分解成连个来实现倾斜的动画?是这样翻译吗。

void Node::setRotation3D(const Vec3& rotation)
{
    if (_rotationX == rotation.x &&
        _rotationY == rotation.y &&
        _rotationZ_X == rotation.z)
        return;
    
    _transformUpdated = _transformDirty = _inverseDirty = true;

    _rotationX = rotation.x;
    _rotationY = rotation.y;

    // rotation Z is decomposed in 2 to simulate Skew for Flash animations
    _rotationZ_Y = _rotationZ_X = rotation.z;

#if CC_USE_PHYSICS
    if (_physicsBody != nullptr)
    {
        CCLOG("Node WARNING: PhysicsBody doesn't support setRotation3D");
    }
#endif
}


```


_rotationZ的声明,component X跟component Y是什么意思?
// rotation Z is decomposed in 2 to simulate Skew for Flash animations
    float _rotationZ_X;             ///< rotation angle on Z-axis, component X
    float _rotationZ_Y;             ///< rotation angle on Z-axis, component Y


```

:13:记录了一下,不知道测试是否准确。
:12:居然不能贴表格

:12:有人吗 不要沉啊

呃。。还没来的及研究这个,不过应该跟图形学里面的描述一致吧,楼主对图形学有系统认识吗,那个应该会对楼主大有帮助,如果有图形学基础的话,那就看看源代码吧,过几天我也研究一下这个特性

— Begin quote from ____

引用第9楼canyang9于2014-07-31 19:01发表的 :
呃。。还没来的及研究这个,不过应该跟图形学里面的描述一致吧,楼主对图形学有系统认识吗,那个应该会对楼主大有帮助,如果有图形学基础的话,那就看看源代码吧,过几天我也研究一下这个特性 http://www.cocoachina.com/bbs/job.php?action=topost&tid=217691&pid=1018349

— End quote

图形学不懂啊。我在试着去看源码了,感谢回复:10:

:12:不要沉

旋转,是旋转的对象整个坐标系。