3

内の球体のように 1 点の周りに配置されたいくつかのオブジェクトを表示したいのですがSceneKit、オブジェクトの構成に問題があります。

主なアイデアは、カメラを中心 (0,0,0) に配置することです。すべてのオブジェクトは、球座標系を使用して構成されます。そのため、オブジェクトをいくつかの画像球面システムに配置したら、いくつかの軸を中心にカメラを回転させます。空間の選択した部分にあるオブジェクトを見る。

最初にやろうとしていること - empty を作成しSCNScene、ライトを追加し、.daeファイルを読み取り、オブジェクトを構成したい。

しかし、今のところ、どこが間違っているのか理解できSCNNodeません-プロパティのいずれかを変更しようとすると-実際には何も変更されません。またzFar、カメラを奇妙な大きな値 - 10000 - に設定して、オブジェクトを表示できるようにする必要があります (今のところ、obj を回転できるようにするためにallowsCameraControlsetted を使用します)。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 のプロパティを変更しても、実際には何も起こりません)?

4

1 に答える 1

0

あなたのリクエストのキーフレーズは

軸を中心にカメラを回転させて、空間の選択した部分にあるオブジェクトを見ます。

SCNLookAtConstraintを確認してください。

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

于 2016-10-28T15:33:19.483 に答える