2016-10-28 19 views
3

SceneKitの球のように1点の周りに配置されたオブジェクトはほとんど表示しませんが、オブジェクトの設定に問題があります。SCNNodeをシーンに設定する

主なアイデアは、カメラを中心(0,0,0)に配置することです。すべてのオブジェクトは、球面座標系を使用して構成されます。いくつかの軸の周りで、選択された空間の一部のオブジェクトを見る。

私は空を作成したいですか?SCNSceneを追加し、光を追加し、.daeファイルを読み取り、オブジェクトを設定します。

しかし今のところ私はどこが間違っているのかわかりません。いつでもSCNNodeのプロパティを変更しようとすると、実際には変更されていません。

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]; 

実際のコード(私は今、OBJを回転させることができるようにするためにYESにsetted allowsCameraControlを使用する)ことができ参照オブジェクトであることを - 10000 - はまた、私は奇妙な大きな値にカメラのzFarを配置する必要があります

何か提案がありますか?たぶん私は何かが恋しいです - SceneKitにはあまりよく知られていません。 追加の注意 - 私はまた.daeファイルに骨ベースのアニメーションをいくつか持っています。

SCNNodeの位置、スケール、回転を変更する方法(実際にはSCNNodeのプロパティの変更には何も起こりません)?

+0

あなたは何を見ますか?あなたは何が見たいですか?スクリーンショットが役立ちます。 –

+0

@HalMueller私は画面をパンすると完全なオブジェクトを参照しています - 標準のカメラ修正( 'allowCameraControl = YES;')を適用すると、開始時にオブジェクトの一部しか表示されません - 開始fovとちょっとずれがあります。何が私はそれがスケールのオブジェクト、または私がヒストリの位置を変更する場合はスペースで移動することができますオブジェクト、またはスケールまたは何かを見たいと思っています。しかし、私が上で説明したように、私はobjの一部だけを見ることができます。追加: 'pauseAnimationForKey:'メソッドでアニメーションを一時停止しようとすると、alosは効果がありませんが、 '.presentationNode.paused = YES' - それは動作します。 – gbk

答えて

0

私はあなたの要求でキーフレーズは、私は宇宙の 選択された部分にオブジェクト(複数可)を見に軸を中心にカメラを回転します

だと思います。

チェックSCNLookAtConstraint

制約プロパティを使用してSCNNodeに制約を割り当てることができます。ターゲットノードを、スペースの選択された部分に対応するオブジェクトに変更します。

+0

AppleDev - 「指定された他のノードに向けてノードを常に向けるように指示する制約」を参照してください。いつも指していますが、私は、ユーザーがオブジェクトの一部だけを見ることができる場面を作る必要があります。電話の回転から、おそらくCoreMotionなどのオプションを使用してください。 – gbk

+0

はい。しかし、制約のターゲットを動的に変更することができます。したがって、電話が回転しているときに、制約のターゲットを別のオブジェクトに変更すると、カメラはそのオブジェクトを指し示します。 –

+0

カメラはobjを正確に指しますか?私はいくつかのobjまたはポイントを空のスペースの間にポイントすることが時々必要です。それは提案された解決策で可能ですか? – gbk

関連する問題