我使用OpenGL绘制了几个 2D 形状,现在我想添加捏合/缩放。我的观点是透视图(顶视图)。我假设它是 z 轴 = 0 的 3D。
现在,我应该如何更改 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);
}
}