我想显示一些对象,像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属性更改时实际上什么也没发生)?
最佳答案
我认为您要求中的关键词是
我将绕轴旋转相机,以查看相机中的对象。
空间的选定部分。
检查SCNLookAtConstraint。
您可以使用其约束属性为SCNNode分配约束。将目标节点更改为与空间的所选部分相对应的对象。