2009-11-13 5 views
4

J'essaie actuellement de trouver comment obtenir les coordonnées du monde à partir de JOGL - au moment où il retourne seulement x = 0.0, y = 0.0 et z = 0.0, peu importe où je clique. Qu'est-ce que je fais mal?JOGL - glu.gluUnProject retourne toujours 0.0

public double[] getMousePosition(int x, int y){ 

    int viewport[] = new int[4]; 
    double modelview[] = new double[16]; 
    double projection[] = new double[16]; 
    float winX, winY, winZ; 
    float posX, posY, posZ; 
    double wcoord[] = new double[4]; 

    gl.glGetDoublev(GL2.GL_MODELVIEW_MATRIX, modelview, 0); 
    gl.glGetDoublev(GL2.GL_PROJECTION_MATRIX, projection, 0); 
    gl.glGetIntegerv(GL2.GL_VIEWPORT, viewport, 0); 

    winX = (float)x; 
    winY = (float)viewport[3] - (float)y; 

    float[] depth = new float[1]; 
    // gl.glReadPixels(winX, winY, 1, 1, gl.GL_DEPTH_COMPONENT, GL2.GL_FLOAT, depth); 

    boolean test = glu.gluUnProject(winX, winY, 0.0, modelview, 0, projection, 0, viewport, 0, wcoord, 0); 

    System.out.println("x: " + wcoord[0] +"y: "+wcoord[1]+" worked? "+test); 
    System.out.println(modelview[0]); 
    return wcoord; 
} 

EDIT :: Vous avez oublié de mentionner que j'ai remarqué que glu.gluUnproject retourne un booléen donc je lui a assigné un booléen test appelé qui retourne false.

EDIT2 :: J'ai ajouté une autre instruction de débogage - System.out.println (modelview [0]); et est également retournaient 0.0

Merci pour votre aide

James

Répondre

0

J'ai finalement trouvé la raison pour laquelle cela se produisait, il s'avère que je tirais gl.glGetIntegerv (GL2.GL_VIEWPORT, viewport, 0); dans une méthode avant celle-ci. Il semble que si vous faites cela, la méthode suivante pour l'appeler ne sera rien d'autre qu'un ensemble de zéros! Merci pour vos suggestions

0

Une raison possible: vous saisir la matrice modèle de vue et la projection à matrice en même temps ..

gluUnProject() fonctionne comme prévu de mon côté, et c'est ce que je fais:

1) Seulement lorsque la taille de la fenêtre et/ou la « caméra » sont mis à jour: saisir la fenêtre et la projection -matrice.
I.E. Vous devriez être après un gl.glMatrixMode(GL.GL_PROJECTION)

2) Chaque "frame": saisissez la matrice de vue de modèle.
I.E. Vous devriez être après une gl.glMatrixMode(GL.GL_MODELVIEW)

3) Alors seulement: passer le tableau 3 à gluUnProject() ...

0

gluUnproject() retournera toujours TRUE et (0,0,0) pour la fenêtre si les coordonnées le point 3D que vous essayez de trouver est loin derrière le plan de coupure proche (généralement aussi derrière la position camara). Vous devrez peut-être faire les calculs manuellement après avoir demandé les matrices et les informations sur la fenêtre.

Questions connexes