所以我在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
值。
答案 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只会旋转对象,而不会旋转轴。 所以问题是解决的