Hallo zusammen,
ich weiß, das ist eine etwas komplexere Frage, aber ich hoffe, irgendwer hat eine Idee für mich.
Das Ziel ist einfach: Mit den Sensordaten die Lage des Handys bekommen und meiner GLES Kamera als Rotationsmatrix zuweisen.
Ich habe hier ein sehr gutes Beispiel gefunden, das allerdings mit GL1.0 funktioniert:
android - How to use onSensorChanged sensor data in combination with OpenGL - Stack Overflow
Nun arbeite ich aber mit eigenen Shadern. Diese funktionieren soweit auch. Jedenfalls wenn ich die Kamera manuell über die Methoden der Matrix Klasse benutze.
Ich nutze also die selben Methoden und generiere über
meine Rotationsmatrix.
Da meine Applikation / Activity in LANDSCAPE läuft, nutze ich noch folgende Methode:
Die schon in der GL1.0 Version (Siehe ogn. Link) in Landscape Modus funktioniert hat.
Das Problem ist, der Screen sieht beim Starten so aus:
Die Rotationsmatrix scheint also offenbar gedreht zu sein. Ich habe schon überlegt, ob meine RemapMethode irgendwie falsch ist, aber andere Werte ergeben keinen Sinn. Die Kamerabewegung funktioniert jetzt nämlich genau richtig. (Abgesehen von der Rotation). Neige ich das Handy nach unten, neigt sich meine gedrehte Kamera auch nach unten. Also in die richtige Richtung. Es sind nur alle Objekte praktisch um 90° nach rechts (CCW auf der Z Achse) verschoben. Mein Boden ist eine rechte Wand...
In der Draw Methode passiert aber nichts, was das jetzt rechtfertigen würde, denke ich:
Wie gesagt, gebe ich manuell Werte ein, klappt alles wunderbar. Was ist also mit meiner Rotationsmatrix falsch?
Ich weiß, es ist schwer zu sagen, aber vielleicht hat irgendwer einen Tipp für mich.
Vielen Dank, ich hoffe, ihr könnt mir helfen!
Tobias
ich weiß, das ist eine etwas komplexere Frage, aber ich hoffe, irgendwer hat eine Idee für mich.
Das Ziel ist einfach: Mit den Sensordaten die Lage des Handys bekommen und meiner GLES Kamera als Rotationsmatrix zuweisen.
Ich habe hier ein sehr gutes Beispiel gefunden, das allerdings mit GL1.0 funktioniert:
android - How to use onSensorChanged sensor data in combination with OpenGL - Stack Overflow
Nun arbeite ich aber mit eigenen Shadern. Diese funktionieren soweit auch. Jedenfalls wenn ich die Kamera manuell über die Methoden der Matrix Klasse benutze.
Ich nutze also die selben Methoden und generiere über
Java:
SensorManager.getRotationMatrix(rotationMatrix, null, bufferedAccelGData, bufferedMagnetData);
Da meine Applikation / Activity in LANDSCAPE läuft, nutze ich noch folgende Methode:
Java:
float[] result = new float[16];
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, result);
return result;
Die schon in der GL1.0 Version (Siehe ogn. Link) in Landscape Modus funktioniert hat.
Das Problem ist, der Screen sieht beim Starten so aus:
Die Rotationsmatrix scheint also offenbar gedreht zu sein. Ich habe schon überlegt, ob meine RemapMethode irgendwie falsch ist, aber andere Werte ergeben keinen Sinn. Die Kamerabewegung funktioniert jetzt nämlich genau richtig. (Abgesehen von der Rotation). Neige ich das Handy nach unten, neigt sich meine gedrehte Kamera auch nach unten. Also in die richtige Richtung. Es sind nur alle Objekte praktisch um 90° nach rechts (CCW auf der Z Achse) verschoben. Mein Boden ist eine rechte Wand...
In der Draw Methode passiert aber nichts, was das jetzt rechtfertigen würde, denke ich:
Java:
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
MatrixStack.glLoadMatrix(sensorManager.getRotationMatrix()); // Schreibt die MVMatrix mit der ogn. Rotationsmatrix
GameRenderer.setPerspMatrix(); // Schreibt die Perspektivmatrix Uniform für GLES. Daran sollte es nicht liegen.
MatrixStack.mvPushMatrix();
drawGround();
MatrixStack.mvPopMatrix();
Wie gesagt, gebe ich manuell Werte ein, klappt alles wunderbar. Was ist also mit meiner Rotationsmatrix falsch?
Ich weiß, es ist schwer zu sagen, aber vielleicht hat irgendwer einen Tipp für mich.
Vielen Dank, ich hoffe, ihr könnt mir helfen!
Tobias