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 に答える