0

wc という名前の子ノードを持つシーンがあります。そのノードにdae/modelファイルを追加したい。

次の方法でモデル/デイを追加できました。

  1. バンドルからの dae アセットを使用して親シーンを作成する
  2. 親シーンを scnView に追加し、それを self.view に型キャストします。
  3. dae を追加する必要なノードを取得します。
  4. 必要なノード dae でサブシーンを作成します。
  5. 親シーンの必須ノードの子としてサブシーン ルート ノードを追加します。
  6. 子ノードの位置を、親シーンの必要なノードの位置に設定します。

以下はスニペットです:

コード スニペット (viewDidLoad 内)

//Create Scene
SCNScene *scene = [SCNScene sceneNamed:@"bathScene.scnassets/peace01.dae"];
SCNView *scnView = (SCNView *)self.view;
scnView.scene = scene;
scnView.allowsCameraControl = YES;
scnView.delegate = self;
scnView.autoenablesDefaultLighting = YES;

//Get the required node where dae is to be added
SCNNode * wcNode = [scnView.scene.rootNode childNodeWithName:@"wc" recursively:YES];
SCNVector3 wcNodeScreenPosition = [scnView projectPoint:wcNode.position];
NSLog(@"wcNode position %f, %f, %f",wcNodeScreenPosition.x, wcNodeScreenPosition.y, wcNodeScreenPosition.z);


//Create sub-Scene
SCNScene* wcScene = [SCNScene sceneNamed:@"bathScene.scnassets/closet.dae"];


//Add the sub-scene root node to the required node of parent scene            
[scnView.scene.rootNode addChildNode:[wcScene.rootNode childNodeWithName:@"ceramic" recursively: false]];
SCNNode * wcDAENode = [wcScene.rootNode childNodeWithName:@"ceramic" recursively: false];
wcDAENode.position = [wcNode position];
SCNVector3 wcDAENodeScreenPosition = [scnView projectPoint:wcDAENode.position];
NSLog(@"DAE position %f, %f, %f",wcDAENodeScreenPosition.x, wcDAENodeScreenPosition.y, wcDAENodeScreenPosition.z);

ログ出力

wcNode 位置 275.306549、157.163620、0.956176

DAE 位置 284.000000、160.000000、0.959596

前述のログ出力でわかるように、必要なノードとその子 Dae ノードの位置は同じではなく、シーン内でシフトされたモデルをレンダリングします。

なぜ位置が違うのですか?

シフトを補正するにはどうすればよいですか?

4

0 に答える 0