Vorrei sapere come utilizzare correttamente l'uscita dal "sensore di rotazione vettoriale". Attualmente ho trovato il seguente e volevo calcolare yaw e pitch dal result[]
, per sapere dove punta il dispositivo (in modalità orizzontale). Ma ho problemi con i risultati. Il calcolo di imbardata è piuttosto preciso ma l'intonazione si sta comportando in modo strano. Forse qualcuno può indicarmi la giusta direzione su come usare i dati. Un'altra cosa che vorrei anche sapere è se l'orientamento del dispositivo (orizzontale o verticale) ha una qualche influenza sull'uscita di questo sensore. Grazie in anticipo.Uso del sensore di rotazione vettoriale
private double max = Math.PI/2 - 0.01;
private double min = -max;
private float[] rotationVectorAction(float[] values) {
float[] result = new float[3];
float vec[] = values;
float quat[] = new float[4];
float[] orientation = new float[3];
SensorManager.getQuaternionFromVector(quat, vec);
float[] rotMat = new float[9];
SensorManager.getRotationMatrixFromVector(rotMat, quat);
SensorManager.getOrientation(rotMat, orientation);
result[0] = (float) orientation[0];
result[1] = (float) orientation[1];
result[2] = (float) orientation[2];
return result;
}
private void main() {
float[] result = rotationVectorAction(sensorInput);
yaw = result[0];
pitch = result[1];
pitch = (float) Math.max(min, pitch);
pitch = (float) Math.min(max, pitch);
float dx = (float) (Math.sin(yaw) * (-Math.cos(pitch)));
float dy = (float) Math.sin(pitch);
float dz = (float) (Math.cos(yaw) * Math.cos(pitch));
}
E in OpenGL ES 2.0 che impostare questo per spostare la mia macchina fotografica in giro:
Matrix.setLookAtM(mVMatrix, 0, 0, 0, 0, dx, dy, dz, 0, 1, 0);
Potresti aggiungere del codice? Per favore. –