2012-06-08 3 views
1

Android 용 단순 증강 현실 도구를 구현하려고합니다. 내 위치와 장치 방향 및 다른 장치의 위치를 ​​입력하고 적절한 크기로 적절한 위치에 중첩 된 아이콘이있는 카메라보기를 제공하면됩니다.Android에서 마커리스 증강 현실 구현

나는 두 곳에 붙어 :

나는 장치의 현재 방위각, 피치, 롤에 대한 업데이트를하는 코드를 썼다.

나는이 값을 읽을 로깅 사용하십시오
private final SensorEventListener goodListener = new SensorEventListener() { 
    private float[] magneticValues; 
    private float[] accelerometerValues; 

    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    } 

    public void onSensorChanged(SensorEvent event) { 
     switch (event.sensor.getType()) { 
     case Sensor.TYPE_MAGNETIC_FIELD: 
      magneticValues = event.values.clone(); 
      break; 
     case Sensor.TYPE_ACCELEROMETER: 
      accelerometerValues = event.values.clone(); 
      break; 
     } 

     if (magneticValues != null && accelerometerValues != null) { 
      float[] outR = new float[9]; 
      float[] orientationValues = new float[3]; 

      SensorManager.getRotationMatrix(outR, null, 
        accelerometerValues, magneticValues); 
      SensorManager.getOrientation(outR, orientationValues); 

      double azimuth = Math.toDegrees(orientationValues[0]); 
      double pitch = Math.toDegrees(orientationValues[1]); 
      double roll = Math.toDegrees(orientationValues[2]); 

     } 
    } 

, 그들은 상대적으로 안정적 보이지만, 그들은 축의 자연 세트 주위에 각도에 해당하지 않는 것, 내가 알아낼 수 없습니다 : 코드는 다음과 같습니다 숫자가 나타내는 것. 이 숫자를 어떻게 해석해야합니까?

http://www.devx.com/wireless/Article/42482/0/page/3의 자습서는 훨씬 간단한 방법을 취하지 만 제대로 작동하지 않습니다.

내 장치의 방위각, 피치 및 롤, 위도와 경도, 다른 장치의 방위각이 있으면 아이콘을 화면에 배치 할 위치를 어떻게 결정할 수 있습니까? 이것은 카메라의 시야를 무한 원뿔이라고 상상하고 지구의 표면에 투영하고 다른 위치가 투영 된 영역 안에 있는지 확인해야하는 복잡한 기하학 문제 인 것 같습니다. 그러나 이것은 매우 복잡한 것처럼 보입니다. 내가 바라 보는 더 좋은 방법이 있습니까?

답변

1

질문에 대한 직접적인 대답은 아니지만 mixaresource code을 살펴볼 수 있습니다.

관심있는 핵심 코드는 다음과 같습니다. https://github.com/mixare/mixare/blob/master/src/org/mixare/MixView.java 행 번호 212 번 이후.

코드에서 알 수 있듯이 azimut, pitch, roll은 사용하지 않고 매트릭스를 조작합니다.

기하학 문제는, 「프로젝트 [지구의 표면에의 프로젝트]」라고하면 이해가되지 않습니다. 나는 FOV가 사용자를 둘러싸는 가상 구체 위에 투사된다고 말했을 것이다.