You coordinates are wrong for the screen/window coordinates, but how do you know that those are not the object coordinates?
Daniel On 7 November 2011 16:34, saex <elpablos...@gmail.com> wrote: > I have a simple Square with openGL es 1 and Android 1.5. The square is > painted on the center of the screen. > > I want that when the user press on the screen, or moves the finger on > the screen, the square get's moved to that position. For do this i > tryed with GLuUnProject, i tryed to obtain the opengl coordinate that > matches with the window XY coordinate touched with the finger (to > translate the polygon to that coordinate in the future), and i'm > writting the coordinates on the LogCat. > > The coordinate's i'm receiving are not true cordinates, are wrong > coordinates. For example this logcat represents a horizontal movement > to the right of the screen: > > 11-07 15:54:37.221: DEBUG/XXXXXXXXX(213): X: -0.003236022 > 11-07 15:54:37.221: DEBUG/XXXXXXXXX(213): Y: -0.047979668 > 11-07 15:54:37.241: DEBUG/XXXXXXXXX(213): X: -0.003236022 > 11-07 15:54:37.251: DEBUG/XXXXXXXXX(213): Y: -0.047807075 > 11-07 15:54:39.110: DEBUG/XXXXXXXXX(213): X: 0.03469036 > 11-07 15:54:39.110: DEBUG/XXXXXXXXX(213): Y: 0.04418271 > 11-07 15:54:43.021: DEBUG/XXXXXXXXX(213): X: -0.029469538 > 11-07 15:54:43.021: DEBUG/XXXXXXXXX(213): Y: -0.034172554 > 11-07 15:54:43.051: DEBUG/XXXXXXXXX(213): X: -0.026708115 > 11-07 15:54:43.051: DEBUG/XXXXXXXXX(213): Y: -0.034172554 > 11-07 15:54:43.081: DEBUG/XXXXXXXXX(213): X: -0.018596433 > 11-07 15:54:43.081: DEBUG/XXXXXXXXX(213): Y: -0.034172554 > 11-07 15:54:43.111: DEBUG/XXXXXXXXX(213): X: -0.013073588 > 11-07 15:54:43.111: DEBUG/XXXXXXXXX(213): Y: -0.034172554 > 11-07 15:54:43.141: DEBUG/XXXXXXXXX(213): X: -0.0039263717 > 11-07 15:54:43.141: DEBUG/XXXXXXXXX(213): Y: -0.033999965 > 11-07 15:54:43.162: DEBUG/XXXXXXXXX(213): X: -0.0011649576 > 11-07 15:54:43.162: DEBUG/XXXXXXXXX(213): Y: -0.033827372 > 11-07 15:54:43.191: DEBUG/XXXXXXXXX(213): X: 7.335304E-4 > 11-07 15:54:43.191: DEBUG/XXXXXXXXX(213): Y: -0.033654787 > > > > > > This is the source code: > > > > > > public class MySurfaceView extends GLSurfaceView implements > Renderer { > private float INITIAL_Z = -35.0f; > private Context context; > private Square square; > private float xrot; //X Rotation > private float yrot; //Y Rotation > private float zrot; //Z Rotation > private float z = INITIAL_Z; //Profundidad en el > eje Z > private float x = 0.0f; //eje X > private float y = 0.0f; //eje Y > > private MatrixGrabber mg = new MatrixGrabber(); //create the > matrix grabber object in your initialization code > byte horizontal=-1; //0: LEFT 1:CENTER 2:RIGHT > byte vertical=-1; //0: TOP 1:CENTER 2:BOTTOM > float startX=-1; > float startY=-1; > float xMovement=0.0f; > float yMovement=0.0f; > private boolean movement_mode=false; > > public MySurfaceView(Context context, Bitmap image, int width, byte > horizontal, byte vertical) { > super(context); > this.context = context; > setEGLConfigChooser(8, 8, 8, 8, 16, 0); //fondo transparente > getHolder().setFormat(PixelFormat.TRANSLUCENT); //fondo > transparente > //Transformamos esta clase en renderizadora > this.setRenderer(this); > //Request focus, para que los botones reaccionen > this.requestFocus(); > this.setFocusableInTouchMode(true); > square = new Square(image); > this.horizontal=horizontal; > this.vertical=vertical; > } > > public void onSurfaceCreated(GL10 gl, EGLConfig config) { > MyGl=gl; > gl.glDisable(GL10.GL_DITHER); > //dithering OFF > gl.glEnable(GL10.GL_TEXTURE_2D); > //Texture Mapping ON > gl.glShadeModel(GL10.GL_SMOOTH); > //Smooth Shading > gl.glClearDepthf(1.0f); > //Depth Buffer Setup > gl.glEnable(GL10.GL_DEPTH_TEST); > //Depth Testing ON > gl.glDepthFunc(GL10.GL_LEQUAL); > gl.glClearColor(0,0,0,0); //fondo transparente > gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); > //Cargamos la textura del cubo. > square.loadGLTexture(gl, this.context); > } > > public void onDrawFrame(GL10 gl) { > //Limpiamos pantalla y Depth Buffer > gl.glClear(GL10.GL_COLOR_BUFFER_BIT | > GL10.GL_DEPTH_BUFFER_BIT); > gl.glLoadIdentity(); > //Dibujado > gl.glTranslatef(x, y, z); //Move z units > into the screen > //gl.glScalef(0.8f, 0.8f, 0.8f); > //Escalamos para que quepa en la > pantalla > //Rotamos sobre los ejes. > gl.glRotatef(xrot, 1.0f, 0.0f, 0.0f); //X > gl.glRotatef(yrot, 0.0f, 1.0f, 0.0f); //Y > gl.glRotatef(zrot, 0.0f, 0.0f, 1.0f); //Z > //Dibujamos el cuadrado > square.draw(gl); > mg.getCurrentProjection(gl); > mg.getCurrentModelView(gl); > > } > > //si el surface cambia, resetea la vista, imagino que esto pasa > cuando cambias de modo portrait/landscape o sacas el teclado físico en > móviles tipo Droid. > public void onSurfaceChanged(GL10 gl, int width, int height) { > if(height == 0) { > height = 1; > } > gl.glViewport(0, 0, width, height); //Reset Viewport > gl.glMatrixMode(GL10.GL_PROJECTION); //Select Projection > Matrix > gl.glLoadIdentity(); > //Reset Projection Matrix > //Aspect Ratio de la ventana > GLU.gluPerspective(gl, 45.0f, (float)width / (float)height, > 0.1f, > 100.0f); > gl.glMatrixMode(GL10.GL_MODELVIEW); //Select Modelview > Matrix > gl.glLoadIdentity(); > //Reset Modelview Matrix > } > > public boolean onTouchEvent(MotionEvent event) { > float [] outputCoords=getOpenGLCoords(event.getX(), > event.getY(), > 0); > x=(outputCoords[0]/outputCoords[3]); > y=(outputCoords[1]/outputCoords[3]); > //z=outputCoords[2]/outputCoords[3]; > Log.d("XXXXXXXXX", "X: "+x); > Log.d("XXXXXXXXX", "Y: "+y); > return true; //El evento ha sido manejado > } > > public float[] getOpenGLCoords(float xWin,float yWin,float zWin) > { > int screenW=SectionManager.instance.getDisplayWidth(); > int screenH=SectionManager.instance.getDisplayHeight(); > //CODE FOR TRANSLATING FROM SCREEN COORDINATES TO OPENGL > COORDINATES > float [] modelMatrix = new float[16]; > float [] projMatrix = new float[16]; > modelMatrix=mg.mModelView; > projMatrix=mg.mProjection; > int [] mView = new int[4]; > mView[0] = 0; > mView[1] = 0; > mView[2] = screenW; //width > mView[3] = screenH; //height > float [] outputCoords = new float[4]; > GLU.gluUnProject(xWin, ((float)screenH)-yWin, zWin, modelMatrix, > 0, projMatrix, 0, mView, 0, outputCoords, 0); > return outputCoords; > } > } > > > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to android-developers@googlegroups.com > To unsubscribe from this group, send email to > android-developers+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en -- Daniel Drozdzewski -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en