Results 1 to 9 of 9

Thread: Getting the correct x y and z

  1. #1
    Junior Member Newbie
    Join Date
    Mar 2011
    Posts
    5

    Getting the correct x y and z

    Hi all,

    Been busy for a while figuring out how to get the coordinates from the mouse x and y.

    If i move my camera to lets say x, y, z and i click with my mouse somewhere on screen it can return between:

    x-1 .. x+1 //
    y-1 .. y+1 //

    Where x and y equals current camera position.

    Problem is i want the x and y location of the current click. e.g. if i place a model @ 50, 40, 10 i want to retreive that location not 0, 0, ,0 ( if my camera is pointed there ) i hope someone has a clue or a directory for me to search in. thnx in advance Wizard

  2. #2
    Junior Member Newbie
    Join Date
    Dec 2010
    Posts
    12

    Re: Getting the correct x y and z

    I think you might want to look at gluUnProject ( http://www.opengl.org/sdk/docs/man/x...uUnProject.xml ). You read the depth at the point of the mouse click (with glReadPixels with a width and height of one) and use it as winZ coordinate, then (objX, objY, objZ) will be the world space location of the clicked at pixel.

  3. #3
    Junior Member Newbie
    Join Date
    Mar 2011
    Posts
    5

    Re: Getting the correct x y and z

    yes i've been busy with gluUnproject already and it does return coordinates but not the right ones.

    I'll post some code here.

    Code :
     
    		//have to get processing to dump all it's matricies into GL, so the functions work. 
    		int viewport[] = new int[4];
    		//For the viewport matrix... not sure what all the values are, 
    		//I think the first two are width and height, and all Matricies in GL seem to be 4 or 16...  
    		double[] proj=new double[16];
    		//For the Projection Matrix, 4x4  
    		double[] model=new double[16];
    		//For the Modelview Matrix, 4x4  
    		gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0);
    		//fill the viewport matrix  
    		gl.glGetDoublev(GLMatrixFunc.GL_PROJECTION_MATRIX, proj, 0);
    		//projection matrix
    		gl.glGetDoublev(GLMatrixFunc.GL_MODELVIEW_MATRIX, model, 0);
    		//modelview matrix  
    		FloatBuffer floatBuffer=ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asFloatBuffer();
    		//set up a floatbuffer to get the depth buffer value of the mouse position  
     
    		gl.glReadPixels(mouseX, settings.getDisplayHeigth() - mouseY, 1, 1, GL2.GL_DEPTH_COMPONENT, GL.GL_FLOAT, floatBuffer);
    		//Get the depth buffer value at the mouse position. 
    		//have to do height-mouseY, as GL puts 0,0 in the bottom left, not top left.  
    		floatBuffer.rewind(); 
    		//finish setting up this.  
    		double[] mousePosArr=new double[4];
    		//the result x,y,z will be put in this.. 4th value will be 1, but I think it's "scale" in GL terms, 
    		//but I think it'll always be 1. 
    		glu.gluUnProject((double)mouseX, settings.getDisplayHeigth() - (double)mouseY, (double)floatBuffer.get(0),
    						 model, 0, proj, 
    						 0, viewport, 0, mousePosArr, 0);
     
    		//the magic function. You put all the values in, and magically the x,y,z values come out :)  
    		gl.glEnd();
     
    		//return new float[]{(float)mousePosArr[0],(float)mousePosArr[1],(float)mousePosArr[2]};
    		//The values are all doubles, so throw them into floats to make life easier.}
    		Vector3D vector = new Vector3D(mousePosArr[0], mousePosArr[1], mousePosArr[2]);
     
    		System.out.println("mouse x "+ mousePosArr[0] );
    		System.out.println("mouse y "+ mousePosArr[1] );
    		System.out.println();
     
    		System.out.println("worldx "+ x);
    		System.out.println("worldy "+ y);
    		System.out.println("worldz "+ z);
     
    		System.out.println();

    This returns the coordinates of the x and y of the camera but never the correct location.

    think of a game like red alert where you click somewhere in the 3D space and it gets the location of the click i need to do the same thing.

    again any help is welcome.

    p.s. the x, y, z variables that are being System outed, are the x, y, z of the camera glu.gluLookat function

  4. #4
    Junior Member Newbie
    Join Date
    Dec 2010
    Posts
    12

    Re: Getting the correct x y and z

    What value do you get for the depth? What is that glEnd() for there? And what is worldX/Y/Z?

  5. #5
    Junior Member Newbie
    Join Date
    Mar 2011
    Posts
    5

    Re: Getting the correct x y and z

    Depth is not really important here since i only need the x and y.
    the glEnd() was not necessary so i've removed that one.


    worldX/Y/Z are the variables used here that define my eyex, eyey and eyez.

    Code :
    glu.gluPerspective(45, widthHeightRatio, 1, 600);
    glu.gluLookAt(x, y, z, x, y + 120, 9, 
           	      0, 1, 0 );

    I then draw a square of lines that "simulate" a flatterrain.

    Code :
     
    gl.glBegin(GL2.GL_LINES);
    gl.glColor4d(0, 1, 0, 1d);
     
    for ( int i = 0; i < map.length; i++ ) {
     
         for ( int j = 0; j < map[i].length; j++ ) {
     
    	gl.glVertex3d(i, j, map[i][j]);
         }
    }
     
    gl.glEnd();

  6. #6
    Junior Member Newbie
    Join Date
    Dec 2010
    Posts
    12

    Re: Getting the correct x y and z

    I meant the depth value you read with glReadPixels, what value is it?

  7. #7
    Junior Member Newbie
    Join Date
    Mar 2011
    Posts
    5

    Re: Getting the correct x y and z

    There is only one value in my buffer.
    If i get that one it returns 0.0 not sure if that is correct

  8. #8
    Junior Member Newbie
    Join Date
    Dec 2010
    Posts
    12

    Re: Getting the correct x y and z

    It sounds like your depth read is incorrect. Are you sure you are clicking on one of the lines and not missing it? You could check by also reading the color. If it's equal to the clear color, you probably read from a spot on which you haven't drawn anything yet.

  9. #9
    Junior Member Newbie
    Join Date
    Mar 2011
    Posts
    5

    Re: Getting the correct x y and z

    The lines are there just to simulate terrain i am not actually using it for example by pushing a name on the stack for each line. Perhaps the image below can be more explaining.


    http://img710.imageshack.us/i/explanationg.png/


    The models there have there own coordinates ( as shown in the image ) I want to get the coordinates of where I click.

    At the moment when i click i receive the camera ( lookat ) x and y

Similar Threads

  1. Replies: 0
    Last Post: 01-10-2017, 07:37 AM
  2. Is this correct?
    By MikeTS in forum OpenGL: Advanced Coding
    Replies: 4
    Last Post: 05-12-2004, 07:53 PM
  3. in MDI in MDI how do I get correct DC
    By REM in forum OpenGL: Basic Coding
    Replies: 2
    Last Post: 11-25-2002, 05:28 AM
  4. is it correct
    By schailan in forum OpenGL: Advanced Coding
    Replies: 1
    Last Post: 05-29-2002, 07:25 AM
  5. Is this correct?
    By KRONOS in forum OpenGL: Advanced Coding
    Replies: 2
    Last Post: 10-10-2000, 11:44 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Proudly hosted by Digital Ocean