AR 객체의 좌표를 조작하는 방법 치트 시트
카메라 50cm 앞에 놓기
guard let camera = sceneView.pointOfView else {
return
}
let cameraPos = SCNVector3Make(0, 0, -0.5)
let position = camera.convertPosition(cameraPos, to: nil)
boxNode.position = position
스크린의 탭한 위치의 50cm 앞에 놓기
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let point = touches.first?.location(in: sceneView) else {
return
}
let infrontOfCamera = SCNVector3(x: 0, y: 0, z: -0.5)
guard let cameraNode = sceneView.pointOfView else { return }
let pointInWorld = cameraNode.convertPosition(infrontOfCamera, to: nil)
var screenPos = sceneView.projectPoint(pointInWorld)
screenPos.x = Float(point.x)
screenPos.y = Float(point.y)
let finalPosition = sceneView.unprojectPoint(screenPos)
boxNode.position = finalPosition
}
탭하여 평면, 수직면에 배치
수평면
수직면
configuration
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
touchesBegan
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let location = touches.first?.location(in: sceneView),
let horizontalHit = sceneView.hitTest(
location,
types: .existingPlane
).first else {
return
}
let column3: simd_float4 = horizontalHit.worldTransform.columns.3
let position = SCNVector3(column3.x, column3.y, column3.z)
boxNode.position = position
sceneView.scene.rootNode.addChildNode(boxNode)
}
임의의 방향을 향하게
예: 카메라 방향을 향하게
guard let camera = sceneView.pointOfView else {
return
}
boxNode.look(at: camera.position)
카메라와 같은 방향을 향해
guard let camera = sceneView.pointOfView else {
return
}
boxNode.eulerAngles = camera.eulerAngles
카메라와 같은 높이에 놓
guard let camera = sceneView.pointOfView else {
return
}
let cameraPos = SCNVector3Make(0, 0, -0.5)
var position = camera.convertPosition(cameraPos, to: nil)
position.y = camera.position.y // ここ
boxNode.position = position
카메라에서 발사
private func shoot(){
guard let camera = sceneView.pointOfView else {
return
}
boxNode.position = camera.position
let targetPosCamera = SCNVector3Make(0, 0, -2)
let target = camera.convertPosition(targetPosCamera, to: nil)
let action = SCNAction.move(to: target, duration: 1)
boxNode.runAction(action)
}
카메라 앞에 물체를 잡아
extension PracticeViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
// このフラグをボタン等で切り替える
if holding {
guard let camera = sceneView.pointOfView else {
return
}
let cameraPos = SCNVector3Make(0, 0, -0.5)
let position = camera.convertPosition(cameraPos, to: nil)
boxNode.position = position
}
}
}
샘플 코드
샘플 코드는 ARKit-Emperor의 Practice에 있습니다!
Reference
이 문제에 관하여(AR 객체의 좌표를 조작하는 방법 치트 시트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kboy/items/7237219766856149c8d8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
guard let camera = sceneView.pointOfView else {
return
}
let cameraPos = SCNVector3Make(0, 0, -0.5)
let position = camera.convertPosition(cameraPos, to: nil)
boxNode.position = position
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let point = touches.first?.location(in: sceneView) else {
return
}
let infrontOfCamera = SCNVector3(x: 0, y: 0, z: -0.5)
guard let cameraNode = sceneView.pointOfView else { return }
let pointInWorld = cameraNode.convertPosition(infrontOfCamera, to: nil)
var screenPos = sceneView.projectPoint(pointInWorld)
screenPos.x = Float(point.x)
screenPos.y = Float(point.y)
let finalPosition = sceneView.unprojectPoint(screenPos)
boxNode.position = finalPosition
}
탭하여 평면, 수직면에 배치
수평면
수직면
configuration
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
touchesBegan
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let location = touches.first?.location(in: sceneView),
let horizontalHit = sceneView.hitTest(
location,
types: .existingPlane
).first else {
return
}
let column3: simd_float4 = horizontalHit.worldTransform.columns.3
let position = SCNVector3(column3.x, column3.y, column3.z)
boxNode.position = position
sceneView.scene.rootNode.addChildNode(boxNode)
}
임의의 방향을 향하게
예: 카메라 방향을 향하게
guard let camera = sceneView.pointOfView else {
return
}
boxNode.look(at: camera.position)
카메라와 같은 방향을 향해
guard let camera = sceneView.pointOfView else {
return
}
boxNode.eulerAngles = camera.eulerAngles
카메라와 같은 높이에 놓
guard let camera = sceneView.pointOfView else {
return
}
let cameraPos = SCNVector3Make(0, 0, -0.5)
var position = camera.convertPosition(cameraPos, to: nil)
position.y = camera.position.y // ここ
boxNode.position = position
카메라에서 발사
private func shoot(){
guard let camera = sceneView.pointOfView else {
return
}
boxNode.position = camera.position
let targetPosCamera = SCNVector3Make(0, 0, -2)
let target = camera.convertPosition(targetPosCamera, to: nil)
let action = SCNAction.move(to: target, duration: 1)
boxNode.runAction(action)
}
카메라 앞에 물체를 잡아
extension PracticeViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
// このフラグをボタン等で切り替える
if holding {
guard let camera = sceneView.pointOfView else {
return
}
let cameraPos = SCNVector3Make(0, 0, -0.5)
let position = camera.convertPosition(cameraPos, to: nil)
boxNode.position = position
}
}
}
샘플 코드
샘플 코드는 ARKit-Emperor의 Practice에 있습니다!
Reference
이 문제에 관하여(AR 객체의 좌표를 조작하는 방법 치트 시트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kboy/items/7237219766856149c8d8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let location = touches.first?.location(in: sceneView),
let horizontalHit = sceneView.hitTest(
location,
types: .existingPlane
).first else {
return
}
let column3: simd_float4 = horizontalHit.worldTransform.columns.3
let position = SCNVector3(column3.x, column3.y, column3.z)
boxNode.position = position
sceneView.scene.rootNode.addChildNode(boxNode)
}
예: 카메라 방향을 향하게
guard let camera = sceneView.pointOfView else {
return
}
boxNode.look(at: camera.position)
카메라와 같은 방향을 향해
guard let camera = sceneView.pointOfView else {
return
}
boxNode.eulerAngles = camera.eulerAngles
카메라와 같은 높이에 놓
guard let camera = sceneView.pointOfView else {
return
}
let cameraPos = SCNVector3Make(0, 0, -0.5)
var position = camera.convertPosition(cameraPos, to: nil)
position.y = camera.position.y // ここ
boxNode.position = position
카메라에서 발사
private func shoot(){
guard let camera = sceneView.pointOfView else {
return
}
boxNode.position = camera.position
let targetPosCamera = SCNVector3Make(0, 0, -2)
let target = camera.convertPosition(targetPosCamera, to: nil)
let action = SCNAction.move(to: target, duration: 1)
boxNode.runAction(action)
}
카메라 앞에 물체를 잡아
extension PracticeViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
// このフラグをボタン等で切り替える
if holding {
guard let camera = sceneView.pointOfView else {
return
}
let cameraPos = SCNVector3Make(0, 0, -0.5)
let position = camera.convertPosition(cameraPos, to: nil)
boxNode.position = position
}
}
}
샘플 코드
샘플 코드는 ARKit-Emperor의 Practice에 있습니다!
Reference
이 문제에 관하여(AR 객체의 좌표를 조작하는 방법 치트 시트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kboy/items/7237219766856149c8d8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
guard let camera = sceneView.pointOfView else {
return
}
boxNode.eulerAngles = camera.eulerAngles
guard let camera = sceneView.pointOfView else {
return
}
let cameraPos = SCNVector3Make(0, 0, -0.5)
var position = camera.convertPosition(cameraPos, to: nil)
position.y = camera.position.y // ここ
boxNode.position = position
카메라에서 발사
private func shoot(){
guard let camera = sceneView.pointOfView else {
return
}
boxNode.position = camera.position
let targetPosCamera = SCNVector3Make(0, 0, -2)
let target = camera.convertPosition(targetPosCamera, to: nil)
let action = SCNAction.move(to: target, duration: 1)
boxNode.runAction(action)
}
카메라 앞에 물체를 잡아
extension PracticeViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
// このフラグをボタン等で切り替える
if holding {
guard let camera = sceneView.pointOfView else {
return
}
let cameraPos = SCNVector3Make(0, 0, -0.5)
let position = camera.convertPosition(cameraPos, to: nil)
boxNode.position = position
}
}
}
샘플 코드
샘플 코드는 ARKit-Emperor의 Practice에 있습니다!
Reference
이 문제에 관하여(AR 객체의 좌표를 조작하는 방법 치트 시트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kboy/items/7237219766856149c8d8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
private func shoot(){
guard let camera = sceneView.pointOfView else {
return
}
boxNode.position = camera.position
let targetPosCamera = SCNVector3Make(0, 0, -2)
let target = camera.convertPosition(targetPosCamera, to: nil)
let action = SCNAction.move(to: target, duration: 1)
boxNode.runAction(action)
}
extension PracticeViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
// このフラグをボタン等で切り替える
if holding {
guard let camera = sceneView.pointOfView else {
return
}
let cameraPos = SCNVector3Make(0, 0, -0.5)
let position = camera.convertPosition(cameraPos, to: nil)
boxNode.position = position
}
}
}
샘플 코드
샘플 코드는 ARKit-Emperor의 Practice에 있습니다!
Reference
이 문제에 관하여(AR 객체의 좌표를 조작하는 방법 치트 시트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kboy/items/7237219766856149c8d8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(AR 객체의 좌표를 조작하는 방법 치트 시트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kboy/items/7237219766856149c8d8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)