티스토리 뷰
반응형
안녕하세요. Base Of Coding 입니다.
Vuforia 카테고리에서 첫 번째로 쓰는 글입니다. 이번엔 카메라 전환에 대해서 알아보도록 하겠습니다.
< 1. CameraDevice Class >
이 CameraDevice 클래스는
즉, Vuforia라는 네임스페이스에 있는 클래스입니다.
AR에서만 사용이 가능한 ARCamera의 카메라의 메소드들이 들어가 있는 클래스입니다.
자세한 내용은
이 링크로 가시면 Vuforia API를 살펴보실 수 있습니다. 물론 영어로 되어있지만요!
< 2. BackGroundPlane >
BackGroundPlane은, 플레이 버튼을 시작하고, AR 카메라를 확인해보시면, 하위객체로 생성되는 카메라의 화면입니다.
카메라를 전환하기 위해서는 이 BackGroundPlane을 적절히 이용해보려 합니다.
어떻게 활용이 되는지 코드를 보면서 확인하겠습니다.
< 3. Camera Rotate Code >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | using UnityEngine; using System.Collections; using Vuforia; public class ARCameraRotation : MonoBehaviour { #region OBJECT_AND_VARIABLE // PUBLIC // AR 카메라 public GameObject ARCamera; // PRIVATE // 버튼을 클릭할 때 마다 이 값을 변경해서, 앞 뒤 전환을 시킬 변수. private bool camRotateFlag; // AR 카메라에 생성되는 하위 화면 객체. private Transform backGroundPlane; // Vector3를 이용하여, Front로 전환을 시킬 때, 이상하게 보이지 않게 하기 위함. private Vector3 planeFrontCameraRotation , planeBackCameraRotaion; #endregion #region UNITY_INTERNAL_FUNC // Awake를 하든, Start를 하든, 사용자의 마음대로 하시면 됩니다. private void Start() { // 앞 뒤 전환용 변수 false로 초기화. camRotateFlag = false; // 시작할 때, AR 카메라에 있는 backGroundPlane 객체에 있는 Transform 컴포넌트 사용 backGroundPlane = ARCamera.transform.GetComponentInChildren<Transform>(); // float형으로 x,y,z라는 변수를 만들고, backGroundPlane의 크기를 대입합니다. float x = backGroundPlane.localScale.x; float y = backGroundPlane.localScale.y; float z = backGroundPlane.localScale.z; // x값을 *-1을 해주면, -가 되어서, 거울처럼 보이는 현상이 나타난다. planeFrontCameraRotation = new Vector3(x * -1, y , z); // 원래 크기 값으로 바꿔주기 위한 초기화. planeBackCameraRotaion = new Vector3(x,y,z); } #endregion #region USER_DEFINED_FUNC public void CameraRotation() { cameraFlag = !cameraFlag; if (cameraFlag) // 전면 카메라 일 경우 { // 코루틴 실행. 전면으로 바꾼다는 것을 매개변수로 보내준다. StartCoroutine(CameraRotationCoroutine(CameraDevice.CameraDirection.CAMERA_FRONT)); } else // 후면 카메라 일 경우 { // 코루틴 실행. 후면으로 바꾼다는 것을 매개변수로 보내준다. StartCoroutine(CameraRotationCoroutine(CameraDevice.CameraDirection.CAMERA_BACK)); } } IEnumerator CameraRotationCoroutine(CameraDevice.CameraDirection dir) { yield return new WaitForSeconds(0.3f); // 0.3초 대기 CameraDevice.Instance.Stop(); // AR카메라 정지. CameraDevice.Instance.Deinit(); // 초기화 해제 CameraDevice.Instance.Init(dir); // 초기화, 매개변수의 값을 넣어준다. if (cameraFlag) // 전면 카메라일 경우, { // 하위객체인, backgroundPlane의 크기값을, 초기화해주었던 planeFrontCameraRotation의 값으로 변경. backGroundPlane.localScale = planeFrontCameraRotation; } else // 후면 일 경우 { backGroundPlane.localScale = planeBackCameraRotation; // 원래 위치값으로 변경. } CameraDevice.Instance.Start(); // AR카메라 실행. } #endregion } | cs |
이렇게 코드를 짜본것은, 저도 AR 카메라 전환을 해보기 위해서, Vuforia API를 뒤지면서, CameraDevice 클래스 문서도 못하는 영어를 보고,
모르는 건 번역해가면서 보다가 구글링을 해가면서 옛날 Vuforia 포럼에 올라오는 질문글들도 보면서 해보았지만 잘 안됐었습니다.
그러다가 ARCamera 객체에서 하위 객체가 생기는 걸 보았고, 그 하위 객체의 x값을 변형해보면 거울처럼 나오지 않을까?라는 생각을 어떻게 갑자기 했는 지 모르겠지만 건드려보자 하고 x를 -값으로 변경했더니 거울처럼 나왔었습니다.
그러다가 제 블로그를 보시는 분들께 도움이 되지 않을까 싶어 올려봅니다.
저는 댓글을 사랑합니다. 이 글에 도움이 되셨으면 댓글 많이 달아주시면 감사하겠습니다!!
지금까지 AR 카메라를 앞 뒤로 전환하는 방법과 거울 기능을 한번 알아봤습니다. 감사합니다!
+ 주의할 점!
if (cameraFlag) // 전면 카메라일 경우,
{
// 하위객체인, backgroundPlane의 크기값을, 초기화해주었던 planeFrontCameraRotation의 값으로 변경.
backGroundPlane.localScale = planeFrontCameraRotation;
}
else // 후면 일 경우
{
backGroundPlane.localScale = planeBackCameraRotation; // 원래 위치값으로 변경.
}
이 코드를 사용할 경우, 좌우반전이 잘 되지만, 그 위에 나타나는 오브젝트마저 좌우반전이 되기 때문에, 마커는 반대로 보이지만 오브젝트 위치는 변경은 그대로 하고 싶으면, 이 코드는 빼세요.
- 이 글에 도움이 되셨다면, 밑에 공감(♡) 버튼을 눌러주시면 감사하겠습니다. -
반응형
'게임 프로그래밍 ( 이제 안함 ) > AR & VR' 카테고리의 다른 글
AR - Wikitude 카메라 셋팅 컨트롤 ( Camera Setting Control ) (0) | 2019.02.16 |
---|---|
AR - Vuforia Image target 이름이 -Default로 변하는 현상 (0) | 2018.11.26 |
AR - Vuforia imagetarget 동적할당. (0) | 2018.09.17 |
AR - Vuforia Unity3D 퍼미션 체크 충돌 이슈 (0) | 2018.09.14 |
AR - Vuforia 카메라 문제 ( iOS ) (0) | 2018.08.17 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Controller
- Vuforia
- c#
- 유니티
- Base Of Coding
- 프로그래밍
- Unity
- GitHub
- JSP
- 안드로이드
- 비지니스 로직
- 스프링
- Next.js
- 유니티3D
- spring boot
- baseofcoding
- Spring
- Java
- 유니티로 배우는 C#
- 게임프로그래밍
- unity3d
- 뷰포리아
- Servlet
- 서블릿
- HTML
- MVC
- VR
- 프리젠테이션 로직
- CSS
- Git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함