将 3D 网格文件放在 Camera ARKit 前面 (objective-C)

Place 3D mesh file in front of Camera ARKit (objective-C)

我正在使用 ARKit 开发 iOS 应用程序。我想在设备(即 ARCamera)前面放置一个 3D 对象。

我现在的代码:

ARFrame* currentFrame = self.sceneView.session.currentFrame;
matrix_float4x4 translation = matrix_identity_float4x4;
translation.columns[3][2] = -1.52; // Translate 5 feet in front of camera
translation.columns[3][1] = -1.22; // Translate 4 feet below the camera

node.simdTransform = matrix_multiply(currentFrame.camera.transform, translation);

node.rotation = SCNVector4Make(0, 0, 0, 0);
node.scale = SCNVector3Make(0.3, 0.3, 0.3);

我有以下问题:

如果您对此主题有任何建议和想法,我将不胜感激。谢谢。

要将 SCNNode 放在相机前面的那个位置(假设您希望它保持锁定状态),您可以这样做:

node.position = SCNVector3(0,-1,-1)

这会将节点设置在下方 1m,距离 Camera 1m。

如果您只想将某些内容 'locked' 放在屏幕中央,您还可以使用:

scnView.pointOfView?.addChildNode(node)

如果您想将 SCNNode 直接放置在使用它的 current.frame 相机前面,您可以使用此方法:

    /// Adds An SCNNode 3m Away From The Current Frame Of The Camera
   func addNodeInFrontOfCamera(){

    guard let currentTransform = augmentedRealitySession.currentFrame?.camera.transform else { return }

    let nodeToAdd = SCNNode()
    let boxGeometry = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
    boxGeometry.firstMaterial?.diffuse.contents = UIColor.red
    nodeToAdd.geometry = boxGeometry

    var translation = matrix_identity_float4x4

     //Change The X Value
     translation.columns.3.x = 0

     //Change The Y Value
     translation.columns.3.y = 0

     //Change The Z Value
     translation.columns.3.z = -3

    nodeToAdd.simdTransform = matrix_multiply(currentTransform, translation)
    augmentedRealityView?.scene.rootNode.addChildNode(nodeToAdd)

}

var 增强现实视图是一个 ARSCNView

更新在Objective C:

-(void)addNodeInFrontOfCamera{

SCNBox * cube = [SCNBox boxWithWidth:0.1 height:0.1 length:0.1 chamferRadius:0.0];
cube.firstMaterial.diffuse.contents = [UIColor redColor];
SCNNode *cubeNode = [SCNNode nodeWithGeometry:cube];
[self.sceneView.scene.rootNode addChildNode:cubeNode];

matrix_float4x4 cameraTransform = self.sceneView.session.currentFrame.camera.transform;
matrix_float4x4 translation = matrix_identity_float4x4;

//Change The X Value
translation.columns[3][0] = 0;

//Change The Y Value
translation.columns[3][1] = 0;

//Change The Z Value
translation.columns[3][2] = -3;

cubeNode.simdTransform = matrix_multiply(cameraTransform, translation);

 }