Я рисую несколько 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);
}
}