thanks, but i have to implement by myself, without using external
libraries

On 5 oct, 17:05, crissgoodlookingguy
<crissgoodlooking...@googlemail.com> wrote:
> 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