我想显示一些放置在一个点周围的对象,比如在 sphere 内SceneKit
,但是对象配置有一些问题。
主要思想是使相机定位在中心(0,0,0)并且所有对象都将被配置为使用球坐标系,所以一旦我将对象放在某个图像球系中,我将围绕一些轴旋转相机查看空间选定部分中的对象。
我开始尝试做的事情 - 我想创建空SCNScene
的、添加灯光、读取.dae
文件和配置对象。
但是现在我无法理解我错在哪里 - 当我尝试更改任何属性时SCNNode
- 实际上没有任何改变。此外,我需要将zFar
相机设置为奇怪的大值 - 10000 - 才能看到物体(我现在使用allowsCameraControl
设置YES
为能够旋转 obj)
实际代码:
SCNScene *scene = [SCNScene scene]; //main scene
SCNNode *cameraNode = [SCNNode node];
cameraNode.camera = [SCNCamera camera];
cameraNode.camera.zFar = 10000; //only with this value i can see my obj
cameraNode.position = SCNVector3Make(0, 0, 0); //position in the center
[scene.rootNode addChildNode:cameraNode];
// create and add a light to the scene
SCNNode *lightNode = [SCNNode node];
lightNode.light = [SCNLight light];
lightNode.light.type = SCNLightTypeOmni;
lightNode.position = SCNVector3Make(0, 10, 10);
[scene.rootNode addChildNode:lightNode];
// create and add an ambient light to the scene
SCNNode *ambientLightNode = [SCNNode node];
ambientLightNode.light = [SCNLight light];
ambientLightNode.light.type = SCNLightTypeAmbient;
ambientLightNode.light.color = [UIColor darkGrayColor];
[scene.rootNode addChildNode:ambientLightNode];
SCNScene *objScene = [SCNScene sceneNamed:@"art.scnassets/file.dae"];
SCNMaterial *material = [SCNMaterial material];
material.diffuse.contents = [UIImage imageNamed:@"art.scnassets/texture.png"];
material.locksAmbientWithDiffuse = true;
SCNNode *node = [objScene.rootNode childNodeWithName:@"obj" recursively:YES];
node.geometry.firstMaterial = material;
//try next:
// node.position = SCNVector3Make(0, 0, 0);
// node.presentationNode.position = SCNVector3Make(0, 0, 0); -> should't be modified as explainde by Apple devs - "The effect of attempting to modify the returned node in any way is undefined"
// node.transform = SCNMatrix4MakeScale(0.5, 0.5, 0.5);
// node.scale = SCNVector3Make(0.1, 0.1, 0.1);
[scene.rootNode addChildNode:node];
有什么建议吗?也许我错过了什么——不是很熟悉SceneKit
。附加说明 - 我还有一些基于骨骼的动画.dae
文件。
如何更改 SCNNode 的位置、比例、旋转(在更改 SCNNode 的属性时实际上没有任何反应)?