List
AR카메라의 회전 각도를 (90,0,0)이 아닌, (0,0,0)으로 하고 싶습니다.
Posted Date: 2019-09-20 15:43     Edited Date: 2019-09-23 6:51     Writer: inactive

Please provide your development details as below;

1. SDK Version: 4.14
5. Target Device(Optional): Android/iOS

 

 

안녕하세요, 제목대로 원래 MAXST의 ARCamera는 기본적으로 회전각이 (90, 0, 0)이라서 아래를 보고 있는데,

저희가 후에 상용어플에 사용하려는 AR콘텐츠들 중 일부가 아래가 아닌, 정면(0, 0, 0)을 봐야 제대로 작동합니다.

 

허나 카메라를 정면으로 하더라도 마커를 인식했을 때 AR콘텐츠들은 '카메라가 아래를 보고 있을' 때를 기준으로 있는데

(서있어야 하는 모델링이 누워있음)

스크립트를 아무리 건드려도 제대로 정면을 보지 못하더군요.

 

혹시 콘텐츠들을 AR카메라가 정면을 본 상태에서도 제대로 이용할 수 있는 방법이 있을까요?

Posted Date: 2019-09-23 0:51     Edited Date: 2019-09-23 0:51     Writer: inactive

element.transform.localRotation = Quaternion.Euler(element.firstRotation + element.vecRotation);

위와같이 로컬로테이션값에 회전값을 추가해서 출력해보시기 바랍니다.

감사합니다. 

 

Leo

Maxst Support Team

Posted Date: 2019-09-23 1:56     Edited Date: 2019-09-23 4:58     Writer: inactive

죄송하지만 혹시 그 스크립트가 어디에 들어가야 할 지 알 수 있을까요?

 

현재 저희 어플에서 쓰고 있는 카메라 좌표를 MAXST에서 제공하고 있는 샘플의

position(0, 2.5, 0) / rotation(90, 0, 0)이 아닌,

position(0, 0, -1.6f) / rotation(0, 0, 0)으로 쓰고 있습니다.

 

rotation값을 답변하신 점에 맞춘다면

ImageTrackableBehaviour 스크립트에서 36줄인
transform.rotation = MatrixUtils.QuaternionFromMatrix(poseMatrix);

이후에

Quaternion.Euler(transform.rotation.x - 90, transform.rotation, transform.rotation)

줄을 추가하라는 말씀이신가요?

 

우선 ImageTrackableBehaviour 스크립트에서

public override void OnTrackSuccess(string id, string name, Matrix4x4 poseMatrix)
        {
            Renderer[] rendererComponents = GetComponentsInChildren(true);
            Collider[] colliderComponents = GetComponentsInChildren(true);

            // Enable renderers
            foreach (Renderer component in rendererComponents)
            {
                component.enabled = true;
            }

            // Enable colliders
            foreach (Collider component in colliderComponents)
            {
                component.enabled = true;
            }

            //transform.position = MatrixUtils.PositionFromMatrix(poseMatrix);
            transform.position = MatrixUtils.PositionFromMatrix(poseMatrix) + new Vector3(0, 2.5f, 2.5f);
            transform.rotation = MatrixUtils.QuaternionFromMatrix(poseMatrix);
            transform.rotation = Quaternion.Euler(transform.rotation.x - 90, transform.rotation.y, transform.rotation.z);
        }

식으로 스크립트를 수정하더라도 [카메라 위아래 회전]과 [오브젝트 위아래] 회전이 반대로 적용되고 있고,

position을 더 다듬으려고 해도 오브젝트의 회전이 카메라랑 맞지 않고 있습니다.

 

Posted Date: 2019-09-23 6:51     Edited Date: 2019-09-23 6:51     Writer: inactive

자답입니다.

그냥 Trackable.cs의 83줄을 바꾸면 됐었네요..

Quaternion rotation = Quaternion.Euler(90, 0, 0); 을

Quaternion rotation = Quaternion.Euler(0, 0, 0); 로요..

 

문제 해결이 어렵지 않은 프로그램이라 다행입니다.