Android сжатие/масштабирование и glfrustum

Я рисую несколько 2D-фигур, используя OpenGL , и теперь я хочу добавить масштабирование/увеличение. перспективно (топ вид ). Я предположил, что это 3D с осью z = 0.

Теперь, как мне изменить glfrustum и добавить метод касания в моей деятельности, чтобы я мог сжимать/масштабировать?

gl.glFrustumf(-ratio, ratio, -1, 1, 1, 25);

Я думаю, что это должно быть что-то вроде

gl.glFrustumf(-ratio, ratio, -1, 1, 1*zoom, 25*zoom);

, но как написать метод касания, чтобы изменить этот параметр масштабирования для выполнения масштабирования двумя пальцами?

Проблема сейчас в рендерере, я добавляю метод масштабирования в конце, но в методе масштабирования выдает ошибку с gl.glfrustum, а на onsurfacechanged не выдает той же ошибки! как я мог это исправить?

public class GLrenderer implements Renderer {
    public GLqueue tri;
    public GLrenderer() {
        tri = new GLqueue();


    }


    public void onSurfaceCreated(GL10 gl, EGLConfig eglConfig) {
        // TODO Auto-generated method stub
        gl.glDisable(GL10.GL_DITHER);
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
        gl.glClearColor(.0f,.0f,.0f, 0f);
        gl.glClearDepthf(1f);
    }


    public void onDrawFrame(GL10 gl) {
        // TODO Auto-generated method stub
        gl.glDisable(GL10.GL_DITHER);
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_COLOR_BUFFER_BIT);

        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        GLU.gluLookAt(gl, 0, 0, -5, 0, 0, 0, 0, 2, 0);

        //gl.glRotatef(1, 1, 0, 0);
    //  gl.glRotatef(10, 0, 0, 1);
        tri.draw(gl);

    }

    public void onSurfaceChanged(GL10 gl, int width, int height ) {
        // TODO Auto-generated method stub
        gl.glViewport(0, 0, width, height);
        float ratio = (float) width / height;
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();

        gl.glFrustumf(-ratio, ratio, -1, 1, 1, 25);
    }

    public static void zoom(float d2) {
        // TODO Auto-generated method stub
          int zoom = (int) (zoom*d2);

                gl.glFrustumf(-ratio, ratio, -1, 1, 1*zoom, 25*zoom);

    }

    }

5
задан Aida E 6 May 2012 в 16:07
поделиться