0

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

我可以通过以下方式添加模型/dae:

  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