Sto costruendo un'applicazione Android che utilizza OpenGL ES 2.0 e ho eseguito un muro. Sto provando a convertire le coordinate dello schermo (dove l'utente tocca) alle coordinate del mondo. Ho provato a leggere e giocare con GLU.gluUnProject, ma o lo sto facendo male o semplicemente non lo capisco.Coordinate dello schermo Android OpenGL ES 2.0 alle coordinate mondiali
Questo è il mio tentativo ....
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];
}
I numeri che sto ottenendo non mi sembra giusto, è questo il modo giusto di utilizzare questo metodo? Funziona con OpenGL ES 2.0? Dovrei rendere la matrice modello una matrice di identità prima di questi calcoli (Matrix.setIdentityM (mModelMatix, 0))?
Come seguito, se questo è corretto, come faccio a scegliere l'uscita Z? Fondamentalmente, so sempre a quale distanza voglio che siano le coordinate del mondo, ma il parametro Z in GLU.gluUnProject sembra essere una sorta di interpolazione tra il piano vicino e quello lontano. È solo un'interpolazione lineare?
Grazie in anticipo
mie soluzioni sono tutti in C++. Basta scannerizzare questa risposta, mi sembra giusto. Quindi, non invierò una risposta. :] – TheBuzzSaw