ARKit으로 공간에 사진을 놓습니다.
이번 샘플로 만들어 보았던 ViewController는 github 에 넣었으므로, 전체는 그쪽을 확인해 주세요.
절차
공간에 사진을 넣으려면 다음 단계가 있습니다.
각각 차례로 해설해 갑니다.
UIImagePickerController를 사용하여 카메라 롤의 사진 가져오기
먼저 UIImagePickerController를 만들어 present합니다.
private func showUIImagePicker() {
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
let pickerView = UIImagePickerController()
pickerView.sourceType = .photoLibrary
pickerView.delegate = self
pickerView.modalPresentationStyle = .overFullScreen
self.present(pickerView, animated: true, completion: nil)
}
}
pickerView에서 작업을 받기 위해 ViewConteoller는 delegate를 준수합니다.
pickerView.delegate = self
extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
setImageToScene(image: image)
}
picker.dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
}
}
이제 카메라 롤의 UIImage를 얻을 수 있었으므로 미리 만들었습니다.
func setImageToScene(image: UIImage)
메서드로 SceneView에 붙여 갑니다.
사진의 UIImage로 SCNNode 만들기
그리고 그 전에 SCNNode를 만드는 방법을 준비해 봅시다.
private func createPhotoNode(_ image: UIImage, position: SCNVector3) -> SCNNode {
let node = SCNNode()
let scale: CGFloat = 0.3
let geometry = SCNPlane(width: image.size.width * scale / image.size.height,
height: scale)
geometry.firstMaterial?.diffuse.contents = image
node.geometry = geometry
node.position = position
return node
}
ARKit 등장 이전부터 있는 SceneKit에는 다양한 SCNNode가 준비되어 있습니다만, 이번은 SCNPlane을 만들어 사진으로서 공간에 붙여 가기로 했습니다.
포인트는
geometry.firstMaterial?.diffuse.contents = image
그래서 이것을하지 않으면 단순한 흰색면이 가능한 한되므로,주의!
(부쩍하지만 여기
scale
는 좋은 느낌이 되도록 튜닝했을 뿐입니다. 웃음)해당 노드를 sceneView에 붙이기
마지막으로 sceneView에 node를 추가합니다.
방금 만든
func createPhotoNode(_ image: UIImage, position: SCNVector3) -> SCNNode
메서드를 호출하여 node를 만들고 있습니다만, 그 인수에 건네주고 있는 position에 의해 사진이 어디에 붙일 수 있을까가 정해집니다.
이번은 htps : // v.ぁsss d. jp / s 마 rtp 네 / 이 p 네 / 이오 s11
private func setImageToScene(image: UIImage) {
if let camera = sceneView.pointOfView {
// カメラから見て50cm先の座標
let position = SCNVector3(x: 0, y: 0, z: -0.5)
// 世界座標系に変換
let convertedPosition = camera.convertPosition(position, to: nil)
let node = createPhotoNode(image, position: convertedPosition)
self.sceneView.scene.rootNode.addChildNode(node)
}
}
이상으로 카메라 롤로 선택한 사진을 카메라의 중앙 부분에 면으로 붙일 수 있었습니다!
참고
관련 APP
github
Reference
이 문제에 관하여(ARKit으로 공간에 사진을 놓습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kboy/items/e18e74e8b341f5d5675d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)