如何在CC3Camera或CC3MeshNode上设置原点轴

时间:2013-03-26 17:15:33

标签: vector rotation cocos3d

所以我在Obj-C中使用Cocos3D。

由于我最初的问题似乎不够明确,无法得到任何答案,我再次写下来。

我正在制作一个3D查看器,我希望能够在屏幕上拖动手指并让我的对象(Dobj)自行旋转。

-(void) startRotatingObjectOnXYAxis { saveXYAxisStartLocation = Dobj.rotation; }
-(void) rotateObjectOnXYAxisBy: (CGPoint) aMovement
{
    CC3Vector rotateVector = CC3VectorMake(aMovement.y, aMovement.x, 0.0f);
    Dobj.rotation = CC3VectorAdd(saveXYAxisStartLocation, rotateVector);
}

问题在于,当我这样做时,物体轴也会旋转,一些拖动后,X轴将是垂直的(而不是水平的),并且旋转变得非常混乱。

所以我想在每次拖动后将轴重置为原点。

类似的东西:

-(void) startRotatingObjectOnXYAxis { saveXYAxisStartLocation = Dobj.rotation; }
-(void) rotateObjectOnXYAxisBy: (CGPoint) aMovement
{
    [Dobj moveMeshOriginTo:CC3VectorMake(0.0f, 0.0f, saveXYAxisStartLocation.z)];
    CC3Vector rotateVector = CC3VectorMake(aMovement.y, aMovement.x, 0.0f);
    Dobj.rotation = CC3VectorAdd(saveXYAxisStartLocation, rotateVector);
}

但它没有任何影响......

在我的示例中,aMovement(UIPanGestureRecognizer*) gesture.translation值。

1 个答案:

答案 0 :(得分:0)

好的,我最终以这个解决方案结束了:

-(void) startRotatingObjectOnXYAxis { objectXYAxisStartRotation =  CC3VectorMake(0.0f, 0.0f, 0.0f); }
-(void) rotateObjectOnXYAxisBy: (CGPoint) aMovement
{
    CC3Vector rotateVector = CC3VectorMake(aMovement.y, aMovement.x, 0.0f);
    [Dobj rotateBy:CC3VectorDifference(rotateVector, objectXYAxisStartRotation)];
    objectXYAxisStartRotation = rotateVector;
}

看来rotateBy只会旋转对象,而不会旋转轴。 所以问题是解决的