我有一个名为 wc 的子节点的场景。我想在该节点上添加 dae/model 文件。
我可以通过以下方式添加模型/dae:
- 使用捆绑包中的 dae 资产创建父场景
- 将父场景添加到 scnView 并将其类型转换为 self.view
- 获取要添加 dae 的所需节点。
- 使用所需的节点 dae 创建一个子场景。
- 将子场景根节点添加为父场景所需节点的子节点。
- 将子节点的位置设置为父场景所需节点的位置。
以下是片段:
代码片段(在 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 节点的位置不同,这会导致模型在场景中移动。
为什么职位不一样?
我如何补偿这种转变?