Настройте SCNNode в сцене

Я хочу отобразить несколько объектов, расположенных вокруг одной точки, как на сфере внутри SceneKit, но есть некоторые проблемы с конфигурацией объекта.

Основная идея состоит в том, чтобы расположить камеру в центре (0,0,0), и весь объект будет сконфигурирован с использованием сферической системы координат, поэтому, как только я поместу объект в какую-либо сферическую систему изображений, я поверну камеру вокруг некоторой оси смотреть на объект (ы) в выбранной части пространства.

Что я пытаюсь сделать для начала - хочу создать пустой SCNSceneдобавить свет, читать .dae файл и настроить объекты.

Но сейчас я не могу понять, где я ошибаюсь - когда я пытаюсь изменить любую собственность для SCNNode - на самом деле ничего не изменилось. Также мне нужно поставить zFar для камеры на странное большое значение - 10000 - чтобы иметь возможность видеть объект (я использую allowsCameraControl установлено на YES на данный момент чтобы можно было вращать объект)

Собственно код:

    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 фактически ничего не происходит)?

1 ответ

Я думаю, что ключевая фраза в вашем запросе

Я поверну камеру вокруг оси, чтобы посмотреть на объект (ы) в выбранной части пространства.

Проверьте SCNLookAtConstraint.

Вы можете назначить ограничение для SCNNode, используя его свойство ограничений. Измените целевой узел на объект, соответствующий выбранной части пространства.

Другие вопросы по тегам