0

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

由于我最初的问题似乎不够清楚,无法得到任何答案,所以我再次写了一遍。

我正在制作一个 3D 查看器,因此我希望能够在屏幕上拖动手指并使我的 object( 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值。

4

1 回答 1

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 只会旋转对象,而不旋转轴。所以问题解决了

于 2013-03-29T10:55:41.853 回答