티스토리 뷰
반응형
    
    
    
  안녕하세요. 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
									
							
								
								- unity3d
- Controller
- 비지니스 로직
- spring boot
- Next.js
- Base Of Coding
- HTML
- 유니티
- Unity
- 서블릿
- CSS
- 프리젠테이션 로직
- 스프링
- 게임프로그래밍
- JSP
- MVC
- Java
- 안드로이드
- Servlet
- Git
- 뷰포리아
- GitHub
- 유니티로 배우는 C#
- c#
- Vuforia
- VR
- baseofcoding
- 프로그래밍
- 유니티3D
- Spring
| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
									글 보관함