Я хочу узнать, как выполнять масштабирование и уменьшение. Это простой пример двумерного треугольника, который вращается. Не могли бы вы рассказать мне, как я могу увеличить масштаб и уменьшить масштаб до этого простого примера?увеличить/уменьшить масштаб в OpenGL ES
Должен ли я использовать gl.glScalef
? Как ?
public class GLrenderer implements Renderer {
public GLqueue tri;
private float angle = 0;
public GLrenderer() {
tri = new GLqueue();
}
@Override
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);
}
@Override
public void onDrawFrame(GL10 gl) {
// TODO Auto-generated method stub
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_COLOR_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0, 0, -10);
gl.glPushMatrix();
gl.glRotatef(angle, 0, 0, 1);
tri.draw(gl);
gl.glPopMatrix();
angle++;
}
@Override
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);
}
}
Это мой класс активности и onTouch
событие, добавляемое к этому. Что я должен добавить, чтобы при касании экрана увеличился масштаб?
GLSurfaceView OurSurface;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
OurSurface = new GLSurfaceView(this);
OurSurface.setRenderer(new GLrenderer());
setContentView(OurSurface);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action) {
case (MotionEvent.ACTION_DOWN): // Touch screen pressed
break;
case (MotionEvent.ACTION_UP): // Touch screen touch ended
break;
case (MotionEvent.ACTION_MOVE): // Contact has moved across screen
break;
case (MotionEvent.ACTION_CANCEL): // Touch event cancelled
break;
}
return super.onTouchEvent(event);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
OurSurface.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
OurSurface.onResume();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
что касается onTouch способ? Я должен использовать это, чтобы иметь возможность масштабировать пальцем – matarsak
, чтобы ваш метод onTouch изменил переменную масштабирования, и изменение будет видно в следующем розыгрыше. –
Как я могу изменить переменную масштабирования? – matarsak