정보공간_1

[6기 부산 박천경] mixare(증강현실) opensource 분석 #2 본문

IT 놀이터/Elite Member Tech & Talk

[6기 부산 박천경] mixare(증강현실) opensource 분석 #2

알 수 없는 사용자 2014. 11. 9. 19:01

안녕하세요 부산 멤버십 박천경 입니다. 

이전의 mixare(증강현실) opensource 분석 #1 에서는 증강현실의 정의 및 SurfaceHolder 생성으로

 SurfaceView를 제어 하여 카메라 화면과 스마트폰의 센서 값들을 읽고 canvas 위에 이미지를 

그리는 작업을 해 보았습니다.

이번 mixare(증강현실) opensource 분석 #2 에서는 증강현실의 opensource인 mixare를 이용하여

 mixare를 구동시키고, 간단히 opensource를 정리해 보겠습니다.

참고로 필자는 window 환경에서 개발을 진행 하였습니다.


1. Mixare



Mixare 는 증강현실의 대표적인 오픈소스 입니다. 위도와 경도를 입력 받아서 카메라를 

비추게 되면 카메라의 화면에 해당 건물의 위치에 에어태깅 방식의 마커를 표시해 주는 오픈소스 입니다.

과제를 통하여 많은 시행 착오를 겪었고, 개인적으로 mixare의 코드가 방대하면서도 복잡하여서 

 모든 코드부분을 이해 할 필요가 없다고 생각 되었습니다. 이 때문에 저는 최대한 제가 과제를 

통해 얻어낸 사실과 그를 이용하여 만든 프로젝트를 간단히 소개해 드리겠습니다.

Mixare의 Source는   https://github.com/mixare/mixare 이곳을 이용하여 다운 받아서 사용하시면 되겠습니다.




위 그림 과 같이 복잡한 코드 부분을 간단히 부분적으로 나누어서 이해하기 쉽게 설명해 보겠습니다. 


1) org.mixare.gui 

RadarPoints : 
화면 좌상단을 기준으로 미니 레이다를 제어한다.좌표,크기,색상,표시거리를 바꿀 수 있으며, 마커를 표시합니다.

ScreenLine : 
Line을 그리거나 특정 앵글에 대한 rotate 값을 구하는 데 쓰일 (x, y) 좌표를 가지고 있습니다.  
Mini lader 반경표시에 쓰이는 라인을 그릴 때의 좌표 및 마커의 클릭 영역을 결정하는 좌표에 
쓰이는 데이터 타입입니다.

ScreenObj : 
interface. public void paint(PaintScreen dw), public float getWidth(), public float getHeight() 
메소드 들이 선언되어 있습니다.

TextObj : 
ScreenObj를 implements하며 Maker의 textblock 을 그리는데 사용됩니다.

PaintScreen :
화면에 Line, Rect, Circle, Text을 그리고, rotate,scale 변환 등 화면에 드로잉 되는 것
 전반을 담당합니다. canvas 이용하여 드로잉 되고, View 및 Marker 등을 그릴 때 다양하게 활용됩니다.

2) org.mixare.reality

PhysicalPlace : 
벡터와 좌표간의 계산을 담당합니다.

public static void calcDestination(double lat1Deg, double lon1Deg, double bear, double d, PhysicalPlace dest)
: 현재좌표,목적지방향,거리를 가지고 목적지좌표를 계산하여 dest에 저장합니다

public static void convLocToVec(Location org, PhysicalPlace gp, MixVector v)
: 현재좌표와 목적지좌표를 가지고 계산하여, 현위치에서 목적지에 대한 벡터값을 구하게 됩니다.
latitude 는 z에 longitude는 x에 altitude는 y에 대응하며 구한 벡터값은 v에 저장합니다.

public static void convertVecToLoc(MixVector v, Location org, Location gp)
: 현재좌표에서 주어진 벡터에 대응하는 목적지 좌표를 구합니다. latitude와 logitude의 계산에 calcDestination 메소드가 사용되고, 계산한 목적지좌표는 gp에 저장됩니다.

3) org.mixare.render

Matrix : 3차원 매트릭스가 정의되어 있다. 메소드로 행렬간에 가능한 여러 형태의 계산을 제공 합니다.

set() : 매트리스의 값 설정 (a1, a2, a3, b1 ,b2, b3, c1, c2, c3)

toIdentity() : 단위행렬로 만듭니다.

toScale(c) : 단위행렬의 상수(c)배로 만듭니다.

adj() : 수반행렬을 구합니다.

invert() : 역행렬을 구합니다.

transpose() : 전치행렬을 구합니다.

Camera : 
Camera 통해 보여질 증강현실의 거리 및 크기를 정의합니다. 증강현실과 관측자 사이의 view angle 기본값은 45도입니다.

2. Maker의 이미지 변경해 보기



위 부분은 마커의 원을 그려주는 부분입니다. 이 부분 또한 mixare(증강현실) opensource 분석 #1 에서 

이용했듯이 Bitmap을 이용해서 다양한 이미지로 변경 시켜 볼수 있습니다.


위와 같이 변경하게 되면 원하는 bitmap 이미지를 사용하여 마커를 그려 보실 수 있으실 것 입니다.



위 그림은 Mixare 구동 했을때의 모습이며, 간단히 Maker를 변경하여 이용할 수 도 있습니다.

JSONObject 와 자신의 링크URL을 통해 데이터 포맷을 분류 해주고 원하는 장소(위치)의 위도 경도 및 

데이터 정보들을 세팅하여 충분히 이용할 수 있을 것 입니다.

이번 mixare(증강현실) opensource 분석 #2 에서는 증강현실의 opensource인 mixare를 이용하여

mixare를 구동시키고, 간단히 Mixare opensource를 정리해 보았습니다. 

수고하셨습니다.