Я пытаюсь постепенно повернуть камеру вокруг оси x на 5 градусов. работает нормально кроме анимации на 355 прыгает внезапно. это происходит из-за цепочки анимации. если мой следующий метод вызывается в SCNSceneRendererDelegate
, то это не вращение по времени. SCNSceneRendererDelegate
срабатывает в каждом кадре. и это означает, что мое действие анимации сцены с продолжительностью еще не готово. уменьшая продолжительность анимации, анимация больше не будет плавной. выполнение таймера с тем же интервалом, что и продолжительность анимации, также выглядит плохо. Есть ли способ сделать эту анимацию гладкой?
-(void) updateCameraRotation
{
SCNQuaternion oldRotScnQuat = _cameraNode.presentationNode.rotation;
GLKQuaternion glQuatOldRot = GLKQuaternionMakeWithAngleAndAxis(oldRotScnQuat.w, oldRotScnQuat.x, oldRotScnQuat.y, oldRotScnQuat.z);
float xan = GLKMathDegreesToRadians(5);
GLKQuaternion newx = GLKQuaternionIdentity;
GLKVector3 vec = GLKVector3Normalize(GLKVector3Make(1, 0, 0));
double result = sinf(xan/2);
newx = GLKQuaternionMakeWithAngleAndAxis(cosf(xan/2), vec.x *result, vec.y * result, vec.z * result);
newx = GLKQuaternionNormalize(newx);
glQuatOldRot = GLKQuaternionMultiply(glQuatOldRot, newx);
axis = GLKQuaternionAxis(glQuatOldRot);
angle = GLKQuaternionAngle(glQuatOldRot);
[_cameraNode runAction:[SCNAction rotateToAxisAngle:SCNVector4Make(axis.x, axis.y, axis.z, angle) duration:1]];
}
SCNTransaction
) анимация будет автоматически создана от текущего значения к новому значению, и нет необходимости отменять предыдущие вызовы. - person mnuages   schedule 02.01.2015