AR카메라의 회전 각도를 (90,0,0)이 아닌, (0,0,0)으로 하고 싶습니다.
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카메라가 정면을 본 상태에서도 제대로 이용할 수 있는 방법이 있을까요?
element.transform.localRotation = Quaternion.Euler(element.firstRotation + element.vecRotation);
위와같이 로컬로테이션값에 회전값을 추가해서 출력해보시기 바랍니다.
감사합니다.
Leo
Maxst Support Team
죄송하지만 혹시 그 스크립트가 어디에 들어가야 할 지 알 수 있을까요?
현재 저희 어플에서 쓰고 있는 카메라 좌표를 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을 더 다듬으려고 해도 오브젝트의 회전이 카메라랑 맞지 않고 있습니다.
자답입니다.
그냥 Trackable.cs의 83줄을 바꾸면 됐었네요..
Quaternion rotation = Quaternion.Euler(90, 0, 0); 을
Quaternion rotation = Quaternion.Euler(0, 0, 0); 로요..
문제 해결이 어렵지 않은 프로그램이라 다행입니다.