Question

The SCNNode take a rotation using a SCNVector4, which has an angle (w) and a magnitude how that angle applies to each axis (x, y, z). For example, to rotate 45 degrees around the x-axis I'd create a SCNVector4 like this:

SCNVector4Make(1.0f, 0, 0, DEG2RAD(45))

What I'd like to do is rotate it across all three axis, for example: 45 degrees on the x-axis, 15 degrees on the y-axis and -135 degress across the z-axis. Does anyone know the math to calculate the final SCNVector4?

Was it helpful?

Solution 2

You'll need to generate an SCNVector4 for each of the rotations, and then multiply them. Note that the order of operations matters!

http://www.cprogramming.com/tutorial/3d/rotationMatrices.html has a pretty good writeup of the math. Any OpenGL reference that deals with rotation matrices is worth a look too.

OTHER TIPS

Instead of rotation property, use eulerAngles and specify angle for each axis

If you're not animating the rotation, it might be cleaner to just set the transform matrix directly, like:

node.transform = CATransform3DRotate(CATransform3DRotate(CATransform3DRotate(node.transform, xAngle, 1, 0, 0), yAngle, 0, 1, 0), zAngle, 0, 0, 1);

Do you ask for rotation matrix or how to simply rotate in general? If the second is correct then for example:

[node runAction:[SCNAction rotateByX:0 y:M_PI z:0 duration:0]];
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top