gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:00:42 25 4
gpt4 key购买 nike

我正在使用 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);

我有以下问题:

  • 将 3D 对象放置在 ARCamera 前面(相机前面和下面)的代码是否正确?

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

最佳答案

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

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

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

如果您只想将某些内容“锁定”在屏幕中央,您还可以使用:

scnView.pointOfView?.addChildNode(node)

如果你想使用它的 current.frame 将一个 SCNNode 直接放在相机前面,你可以使用这个:

    /// 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 augmentedRealityView 是一个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);

}

关于ios - 将 3D 网格文件放在 Camera ARKit 前面(objective-C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49147269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com