我有一个名为 wc 的子节点的场景。我想在该节点上添加 dae/model 文件。

我能够通过以下方式添加 model/dae:

  • 使用 bundle 中的 dae 资产创建父场景

  • 将父场景添加到 scnView 并将其强制转换为 self.view

  • 获取要添加 dae 的必需节点。

  • 使用所需的节点 dae 创建 sub-Scene。

  • 将 sub-scene 根节点添加为父场景所需节点的子节点。

  • 将子节点的位置设置为父场景的所需节点的位置。

以下是片段:

代码片段(在 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 节点的位置与渲染模型在场景中移动的位置不同。

为什么职位不同?

我该如何弥补这一转变?