2016-10-28 71 views
3

我想顯示圍繞SceneKit範圍內球體上的一個點放置的一些對象,但在對象配置方面存在一些問題。在場景中配置SCNNode

的主要思想是使相機定位在中心(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的屬性實際上什麼都沒有改變)?

+0

你看到了什麼?你要看什麼?截圖會有所幫助。 –

+0

@HalMueller我看到完整的對象,如果我平移屏幕 - 這意味着如果我應用標準攝像機修改('allowedCameraControl = YES;'),開始時我只看到對象的一部分 - 所以它與啓動fov有點不對齊。我希望看到它被放大的對象,或者如果我改變直方圖位置或比例或任何其他對象,可以在空間中移動的對象。但正如我上面所描述的,我只能看到obj的一部分,在移動時我注意到所有對象。另外:當我嘗試用'pauseAnimationForKey:'方法暫停動畫時,它是沒有效果的,但是使用'.presentationNode.paused = YES' - 這是行得通的。 – gbk

回答

0

我想你請求中的關鍵詞是

我會旋轉的攝像頭周圍的軸來看看在空間 選擇部分對象(或多個)。

檢查SCNLookAtConstraint

您可以使用其約束屬性爲SCNNode分配約束。將目標節點更改爲與所選空間部分對應的對象。

+0

我在AppleDev上看到 - 「使節點指向始終指向指定的其他節點的約束。」總是指向,但我需要製作場景,用戶只能看到部分對象,依靠手機旋轉,也許使用CoreMotion或類似的選項 – gbk

+0

是的。但是你可以動態地改變約束的目標。所以,如果隨着手機的旋轉,您將約束的目標更改爲不同的對象,相機將指向它。 –

+0

相機將完全指向obj?我有時需要指向幾個目標或指向空白空間。建議的解決方案有可能嗎? – gbk