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

Reply via email to