From 3a2de2bc6a2e6334f935631599d0899853edfef5 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 13 Oct 2023 14:12:24 +0900 Subject: [PATCH] lottie/builder: fix a regression bug. currently thorvg doesn't support full 3d transformation. orthogonal projection is mandatory. Issue: https://github.com/thorvg/thorvg/issues/1698 --- src/loaders/lottie/tvgLottieBuilder.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index b6cf8c82..530cf384 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -86,22 +86,30 @@ static void _updateChildren(LottieGroup* parent, int32_t frameNo, queuee22 *= cosf(radian); +} + static void _rotateY(Matrix* m, float degree) { if (degree == 0.0f) return; auto radian = degree / 180.0f * M_PI; - m->e11 = cosf(radian); - m->e31 = -sinf(radian); + m->e11 *= cosf(radian); } -static void _rotateX(Matrix* m, float degree) +static void _rotationZ(Matrix* m, float degree) { if (degree == 0.0f) return; auto radian = degree / 180.0f * M_PI; + m->e11 = cosf(radian); + m->e12 = -sinf(radian); + m->e21 = sinf(radian); m->e22 = cosf(radian); - m->e32 = -sinf(radian); } @@ -123,7 +131,7 @@ static bool _updateTransform(LottieTransform* transform, int32_t frameNo, bool a auto angle = 0.0f; if (autoOrient) angle = transform->position.angle(frameNo); - mathRotate(&matrix, transform->rotation(frameNo) + angle); + _rotationZ(&matrix, transform->rotation(frameNo) + angle); if (transform->rotationEx) { _rotateY(&matrix, transform->rotationEx->y(frameNo));