OpenGLを使用して複数の2Dシェイプを描画していますが、ピンチ/ズームを追加します。私の見解は視点(上から見たもの)です。Androidのピンチ/ズームとglfrustum
glfrustumを変更して、自分のアクティビティでタッチメソッドを追加してピンチ/ズームできるようにするにはどうすればよいですか?
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 25);
私はそれが
gl.glFrustumf(-ratio, ratio, -1, 1, 1*zoom, 25*zoom);
のようなものであるべきだと思うが、どのようにタッチ方法は、2つの指ズームを行うため、このズームパラメータを変更するために記述する必要がありますか?
問題がレンダリングされました。私は最後にズームメソッドを追加しますが、ズームメソッドではglglfrustumでエラーが発生しますが、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);
}
}
これを行う例はありますか?私はこれを行うためにタッチメソッドを設定する方法と、カメラではないスケーリング倍率の例のほとんどを設定していません – matarsak
「ズーム」値はスケーリング係数ですが、変更するのではなく「カメラ」を変更しますシーン。ピンチから値を計算できる方法があれば、それを挿入することができます。それ以外の場合は、私は家に帰るときにスニペットを投稿することができます。 – Jave
三角形やどのような形状であっても、これを行う例(錐台のパラメータを変更してズームを設定する)を私に与えたら、私はとても感謝しています。 – matarsak