There's an easier way use Adobe AIR. *Simples*


On Oct 4, 4:42 pm, saex <elpablos...@gmail.com> wrote:
> i have an application that shows a simple square polygon represented
> on a GLSurfaceView. Actually i can do zoomIn and zoomOut with two
> buttons.
>
> But now i want to implemente the iphone multitouch style zoomIn and
> zoomOut. It means that when the user presses with two fingers the
> screen and move one finger into another, the user is doing zoomOut,
> and when the user separates the fingers makes zoomIn.
>
> How can i implement this with Android, openglES, and GLsurfaceView?
>
> the class:
>
>     public class MySurfaceView extends GLSurfaceView implements
> Renderer {
>         private Context context;
>         private Square square;
>         /* Rotation values */
>         private float xrot;                                     //X Rotation
>         private float yrot;                                     //Y Rotation
>         /* Rotation speed values */
>         private float xspeed;                           //X Rotation Speed ( 
> NEW )
>         private float yspeed;                           //Y Rotation Speed ( 
> NEW )
>         private float z = -5.0f;                        //Depth Into The 
> Screen ( NEW )
>         /*
>          * These variables store the previous X and Y
>          * values as well as a fix touch scale factor.
>          * These are necessary for the rotation transformation
>          * added to this lesson, based on the screen touches. ( NEW )
>          */
>         private float oldX;
>         private float oldY;
>         private final float TOUCH_SCALE = 0.2f;         //Proved to be good 
> for
> normal rotation ( NEW )
>
>         public MySurfaceView(Context context) {
>                 super(context);
>                 this.context = context;
>                 setEGLConfigChooser(8, 8, 8, 8, 16, 0); //fondo transparente
>                 getHolder().setFormat(PixelFormat.TRANSLUCENT); //fondo
> transparente
>                 //Set this as Renderer
>                 this.setRenderer(this);
>                 //Request focus, otherwise buttons won't react
>                 this.requestFocus();
>                 this.setFocusableInTouchMode(true);
>                 square = new Square();
>         }
>
>         public void onSurfaceCreated(GL10 gl, EGLConfig config) {
>                 gl.glDisable(GL10.GL_DITHER);                           
> //Disable dithering ( NEW )
>                 gl.glEnable(GL10.GL_TEXTURE_2D);                        
> //Enable Texture Mapping
>                 gl.glShadeModel(GL10.GL_SMOOTH);                        
> //Enable Smooth Shading
>                 gl.glClearDepthf(1.0f);                                       
>   //Depth Buffer Setup
>                 gl.glEnable(GL10.GL_DEPTH_TEST);                        
> //Enables Depth Testing
>                 gl.glDepthFunc(GL10.GL_LEQUAL);                         //The 
> Type Of Depth Testing
> To Do
>                 gl.glClearColor(0,0,0,0); //fondo transparente
>
>                 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, 
> GL10.GL_NICEST);
>
>                 //Load the texture for the cube once during Surface creation
>                 square.loadGLTexture(gl, this.context);
>         }
>
>         public void onDrawFrame(GL10 gl) {
>
>                 //Clear Screen And Depth Buffer
>                 gl.glClear(GL10.GL_COLOR_BUFFER_BIT |
> GL10.GL_DEPTH_BUFFER_BIT);
>                 gl.glLoadIdentity();                                    
> //Reset The Current Modelview Matrix
>
>                 //Drawing
>                 gl.glTranslatef(0.0f, 0.0f, z);                 //Move z 
> units into the screen
>                 gl.glScalef(0.8f, 0.8f, 0.8f);                  //Scale the 
> Cube to 80
> percent, otherwise it would be too large for the screen
>
>                 //Rotate around the axis based on the rotation matrix 
> (rotation,
> x, y, z)
>                 gl.glRotatef(xrot, 1.0f, 0.0f, 0.0f);   //X
>                 gl.glRotatef(yrot, 0.0f, 1.0f, 0.0f);   //Y
>
>                 square.draw(gl);                                        
> //Draw the Cube
>
>                 //Change rotation factors
>                 xrot += xspeed;
>                 yrot += yspeed;
>         }
>
>         /**
>          * If the surface changes, reset the view
>          */
>         public void onSurfaceChanged(GL10 gl, int width, int height) {
>                 if(height == 0) {                                             
>   //Prevent A Divide By Zero By
>                         height = 1;                                           
>   //Making Height Equal One
>                 }
>                 gl.glViewport(0, 0, width, height);     //Reset The Current
> Viewport
>                 gl.glMatrixMode(GL10.GL_PROJECTION);    //Select The 
> Projection
> Matrix
>                 gl.glLoadIdentity();                                    
> //Reset The Projection Matrix
>                 //Calculate The Aspect Ratio Of The Window
>                 GLU.gluPerspective(gl, 45.0f, (float)width / (float)height,
> 0.1f, 100.0f);
>                 gl.glMatrixMode(GL10.GL_MODELVIEW);     //Select The Modelview
> Matrix
>                 gl.glLoadIdentity();                                    
> //Reset The Modelview Matrix
>         }
>
>         public boolean onTouchEvent(MotionEvent event) {
>                 float x = event.getX();
>             float y = event.getY();
>             //If a touch is moved on the screen
>             if(event.getAction() == MotionEvent.ACTION_MOVE) {
>                 //Calculate the change
>                 float dx = x - oldX;
>                 float dy = y - oldY;
>                 //Define an upper area of 10% on the screen
>                 //int upperArea = this.getHeight() / 10;
>                 //Zoom in/out if the touch move has been made in the
> upper
>                 //if(y < upperArea) {
>                         //z -= dx * TOUCH_SCALE / 2;
>                 //Rotate around the axis otherwise
>                 //} else {
>                     xrot += dy * TOUCH_SCALE;
>                     yrot += dx * TOUCH_SCALE;
>                 //}
>             //A press on the screen
>             } else if(event.getAction() == MotionEvent.ACTION_UP) {
>                 //Define an upper area of 10% to define a lower area
>                 //int upperArea = this.getHeight() / 10;
>                 //int lowerArea = this.getHeight() - upperArea;
>                 //Change the light setting if the lower area has been
> pressed
>                 //if(y > lowerArea) {        }
>             }
>
>             //Remember the values
>             oldX = x;
>             oldY = y;
>             //We handled the event
>                 return true;
>         }
>
>         public void zoomIn(){ z=z+0.2f; }
>         public void zoomOut(){ z=z-0.2f; }
>     }

-- 
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