Hi, i want to place a object in 3d world space without the use of hittest or plane detection in ios swift code. Suggest the best method.
Now, I take the camera center matrix and use simd_mul to place the object, it works but the object gets placed at the centre of the mobile screen. I want to select the x and y positino on the screen 2d coordinate and place the object.
I tried using the unprojectpoint function, to get the AR scene world coordinate of the point i touch on the mobile screen. I get the x, y,z values, they are very close to the values from camera center matrix. When i try to replace the unprojectpoint values in the cameracenter matrix, i dont see a difference in the location of the placed object.
The below code always place object from center screen with specified depth, But i need to place object in user specified position(x,y) of the screen with depth.
2D pixel coordinate system of the renderer to the 3D world coordinate system of the scene.
/* Create a transform with a translation of 0.2 meters in front of the camera. */
var translation = matrix_identity_float4x4
translation.columns.3.z = -0.2
let transform = simd_mul(view.session.currentFrame.camera.transform, translation)
Refer from : [https://developer.apple.com/documentation/arkit/arskview/providing_2d_virtual_content_with_spritekit)
The code i used for replacing the camera center matrix with the unprojectpoint is
let vpWithZ = SCNVector3(x: 100.0, y: 100.0, z: -1.0)
let worldPoint = sceneView.unprojectPoint(vpWithZ)
var translation = matrix_identity_float4x4
translation.columns.3.z = Float(Depth)
var translation2 = sceneView.session.currentFrame!.camera.transform
translation2.columns.3.x = worldPoint.x
translation2.columns.3.y = worldPoint.y
translation2.columns.3.z = worldPoint.z
let new_transform = simd_mul(translation2, translation)
/* add object name you wanted in your project*/
let sphere = SCNSphere(radius: 0.03)
let objectNode = SCNNode(geometry: sphere)
objectNode.position = SCNVector3(x: transform.columns.3.x, y: transform.columns.3.y, z: transform.columns.3.z)
The below image shows outline of my idea.