1

因此,从 SceneKit 开始,到目前为止一切顺利,直到我偶然发现了转换,认为这就像层上的 CA3d* 转换。

然而,关于 Z 轴的工作方式,我似乎完全错了,转换的工作方式也大不相同。

例如,我正在尝试完成 3d 轨道式运动,类似于旋转木马外观。这段 CA3D 代码可以很好地做到这一点:

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

如果应用于具有不同“度”值的多个对象,您将获得漂亮的圆形 3d 轨道外观。

与 SceneKit 相同会产生不同的结果:

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

实际发生的情况是在旋转后 Z 值轴会根据 CAT3D + 图层中应用的旋转进行更改和平移,但是在 SceneKit 上,Z 轴始终是恒定的,因此平移只会将它们一起移动,因此您只会得到一个挤压看。

所以我知道这是在真正的 3d 空间中工作的,但现在看来我必须使用 Sphereical 和 Ellipse 数学来做同样的事情。

所以任何人都可以给我提示如何做我想做的事情?我现在正在尝试球面数学并使用 SCNMatrix4Translate 但我还没有完全掌握数学。

我认为我需要的是计算椭圆 xyz 的公式,我追求的是与此非常相似的东西:

http://en.wikipedia.org/wiki/Ellipse#mediaviewer/File:Conicas1.PNG 在此处输入图像描述

可以使用上面的 CAT3D 片段在图层上实现这种轨道。

长话短说,我需要得到一个像上图这样的轨道布局,并且需要一些关于 SceneKit 和/或几何数学的帮助。所有物体都应该像轨道一样围绕中心原点旋转

4

0 回答 0