SceneKit Orbital Transformations

2019-03-22 08:09发布

问题:

So having started with SceneKit all has gone well so far until I stumbled upon transformations, thinking that it would be like CA3d* transformations on layers.

However it seems I quite wrong and transformation work quite differently with regards to how the Z-axis works.

For example I am trying to accomplish a 3d orbital style movement, similar to a carousel look. This piece of CA3D code works brilliantly to do that:

var trans = CATransform3DIdentity
trans = CATransform3DRotate(trans, deg * (Float(M_PI)/180), 1, 1, 0)
trans = CATransform3DTranslate(trans, 0, 0, 100)
layer.transform = trans

If applied to multiple objects with different "deg" values, you get a nice circular 3d orbit look.

The same with SceneKit produces different result:

var trans = SCNMatrix4Identity
trans = SCNMatrix4Rotate(trans,Float(angleTemp*(M_PI/180)), 1, 1, 0)
trans = SCNMatrix4Translate(trans, 0, 0, 100)
node.transform = transform

What happens actually is after the rotation the Z-value axis changes and translates based on the rotation applied in CAT3D + layers, however on SceneKit the Z-axis is always constant so the translation just moves them all together, so you just get a squashed look.

So I understand that this is working in true 3d space but now it seems I am having to work with Sphereical and Ellipse mathematics to do the same.

So anyone can offer me tips how to do what I am trying to do? I am now experimenting with spherical maths and using SCNMatrix4Translate but I haven't quite got the maths right yet.

I think what I need is formulas to calculate xyz for an Ellipse, I am after something very similar to this:

http://en.wikipedia.org/wiki/Ellipse#mediaviewer/File:Conicas1.PNG

That kind of orbit can be achieved using the CAT3D snippet above on layers.

So long story short, I need to get an orbital layout like the above picture and need some help on it with SceneKit and/or geometry maths. All the object should rotate around a centre origin like an orbit