JOGL - glu.gluUnProject always returning 0.0

核能气质少年 提交于 2019-12-10 17:26:12

问题


I'm currently trying to work out how to get world coordinates from JOGL - at the moment it only returns x = 0.0, y= 0.0 and z = 0.0 no matter where I click. What am I doing wrong?

 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 :: Forgot to mention that I noticed that glu.gluUnproject returns a boolean so I assigned it to a boolean called test which returns false.

EDIT2 :: I've added another debug statement - System.out.println(modelview[0]); and is also returning 0.0

Thank you for your help

James


回答1:


One possible reason: you're grabbing the model-view matrix and the projection-matrix at the same time?..

gluUnProject() is working as intended on my side, and that's what I'm doing:

1) Only when the view-port size and/or the "camera" are updated: grab the viewport and the projection-matrix.
I.E. You should be after a gl.glMatrixMode(GL.GL_PROJECTION)

2) Each "frame": grab the model-view matrix.
I.E. You should be after a gl.glMatrixMode(GL.GL_MODELVIEW)

3) Then only: pass the 3 array to gluUnProject()...




回答2:


gluUnproject() will always return TRUE and (0,0,0) for the window coordinates if the 3D point you are trying to find is far behind the near clipping plane (typically also behind the camara position). You may have to do the calculations manually after querying for the matrices and viewport info.




回答3:


I've finally found the reason why this was happening, it turns out that I was pulling gl.glGetIntegerv( GL2.GL_VIEWPORT, viewport, 0 ); in a method before this one. It seems that if you do this the next method to call it will be returned nothing but a set of zeros!

Thanks for your suggestions



来源:https://stackoverflow.com/questions/1732117/jogl-glu-gluunproject-always-returning-0-0

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!