Я хочу отобразить несколько объектов, расположенных вокруг одной точки, например, на сфере внутри 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 фактически ничего не происходит)?
allowsCameraControl = YES;
), при запуске я вижу только часть объекта - так что это немного не совпадает с начальным полем зрения. То, что я хочу видеть, это масштабируемый объект или объект, который можно перемещать в пространстве, если я изменю его положение, или масштаб, или что-то еще. Но, как я описал выше, я могу видеть только часть объекта, при движении, как уже отмечалось, я вижу весь объект. Дополнительно: когда я пытаюсь приостановить анимацию с помощью методовpauseAnimationForKey:
, это также не имеет никакого эффекта, но с помощью.presentationNode.paused = YES
- это работает. - person hbk   schedule 30.10.2016