座標(0、0、0)を指すOpenGLで描画された3D矢印があり、GPSの位置と方向に応じて特定のGPS位置を指しています。OpenGLの3DオブジェクトをGPS位置(緯度、経度)を指すように回転させるにはどうすればよいですか?
私は方位を(携帯電話の向きで)計算し、実際の北(磁気北ではない)に調整しようとしました。
SensorManager.getOrientation(remappedRotationMatrix, orientation);
// convert radians to degrees
float azimuth = orientation[0];
azimuth = azimuth * 360/(2 * (float) Math.PI);
GeomagneticField geoField = new GeomagneticField(
Double.valueOf(loc.getLatitude()).floatValue(),
Double.valueOf(loc.getLongitude()).floatValue(),
Double.valueOf(loc.getAltitude()).floatValue(),
System.currentTimeMillis());
// converts magnetic north into true north
azimuth -= geoField.getDeclination();
次に、私の指摘したい位置に私の位置からベアリングを取得します。
target.setLatitude(42.806484);
target.setLongitude(-1.632482);
float bearing = loc.bearingTo(target); // (it's already in degrees)
if (bearing < 0) {
bearing = bearing + 360;
}
float degrees = bearing - azimuth;
if (degrees < 0) {
degrees = degrees + 360;
}
と私は矢印
gl.glRotatef(degrees, 0.0f, 1.0f, 0.0f);
arrow.draw(gl);
を回転させる必要があり度を計算し、それを行うには何らかの方法はありますか?別の可能性は、GPSの位置をOpenGLの座標に変換し、それを指すためにGLU.gluLookAtを使用することですか?
ありがとうございました。
私は自分のコードの一部を表示するように質問を編集しましたので、私が尋ねていることを人々が理解できるようになりました。私は昨日できませんでした。 – richartidus