3

我想显示一些放置在一个点周围的对象,比如在 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 的属性时实际上没有任何反应)?

4

1 回答 1

0

我认为您请求中的关键词是

我将围绕轴旋转相机以查看所选空间部分中的对象。

检查SCNLookAtConstraint

您可以使用约束属性将约束分配给 SCNNode。将目标节点更改为空间选定部分对应的对象。

于 2016-10-28T15:33:19.483 回答