Ich baue eine Android-Anwendung, die OpenGL ES 2.0 verwendet und ich habe in eine Wand gerannt. Ich versuche, Bildschirmkoordinaten (wo der Benutzer berührt) zu Weltkoordinaten zu konvertieren. Ich habe versucht, mit GLU.gluUnProject zu lesen und zu spielen, aber ich mache es entweder falsch oder verstehe es einfach nicht.Android OpenGL ES 2.0 Bildschirmkoordinaten zu Weltkoordinaten
Dies ist mein Versuch ....
public void getWorldFromScreen(float x, float y) {
int viewport[] = { 0, 0, width , height};
float startY = ((float) (height) - y);
float[] near = { 0.0f, 0.0f, 0.0f, 0.0f };
float[] far = { 0.0f, 0.0f, 0.0f, 0.0f };
float[] mv = new float[16];
Matrix.multiplyMM(mv, 0, mViewMatrix, 0, mModelMatrix, 0);
GLU.gluUnProject(x, startY, 0, mv, 0, mProjectionMatrix, 0, viewport, 0, near, 0);
GLU.gluUnProject(x, startY, 1, mv, 0, mProjectionMatrix, 0, viewport, 0, far, 0);
float nearX = near[0]/near[3];
float nearY = near[1]/near[3];
float nearZ = near[2]/near[3];
float farX = far[0]/far[3];
float farY = far[1]/far[3];
float farZ = far[2]/far[3];
}
Die Zahlen, die ich bin immer noch nicht richtig sein, dann ist dies der richtige Weg, diese Methode zu nutzen? Funktioniert es für OpenGL ES 2.0? Soll ich die Modellmatrix vor diesen Berechnungen zu einer Identitätsmatrix machen (Matrix.setIdentityM (mModelMatix, 0))?
Als Follow up, wenn das korrekt ist, wie wähle ich den Ausgang Z? Grundsätzlich weiß ich immer, in welcher Entfernung die Weltkoordinaten liegen sollen, aber der Z-Parameter in GLU.gluUnProject scheint eine Art Interpolation zwischen der nahen und der fernen Ebene zu sein. Ist es nur eine lineare Interpolation?
Vielen Dank im Voraus
Meine Lösungen alle in C++. Wenn ich nur über diese Antwort scanne, sieht es für mich richtig aus. Also werde ich keine Antwort posten. :] – TheBuzzSaw