2011-11-03 115 views
0

所以,我正在尝试为一个课程制作3D绘图器。现在我正在理解OpenGL,并且我失败了。我想移动相机,但是我什么都不能。为什么这不起作用?Android上的OpenGL ES

public class G3DRenderer implements GLSurfaceView.Renderer, OnTouchListener { 
    float[] camera = {0, 0, 0.5f}, focus = {0, 0, 0}, orientation = {0, 1, 0}; 

    Square square; 

    @Override 
    public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
     gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); 
     gl.glShadeModel(GL10.GL_SMOOTH); 
     gl.glClearDepthf(1.0f); 
     gl.glEnable(GL10.GL_DEPTH_TEST); 
     gl.glDepthFunc(GL10.GL_LEQUAL); 
     gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); 

     float v = 1.0f; 
     int c = 0xFFFFFF; 
     square = new Square(
      new float[] { 
       -v, v, 0, 
       -v, -v, 0, 
       v, v, 0, 
       v, -v, 0, 
      }, 
      new short[] {0, 1, 2, 3}, 
      new int[] { 
       c, 0, 0, c, 
       0, c, 0, c, 
       0, 0, c, c, 
       c, c, c, 0, 
      } 
     ); 
    } 

    private void look(GL10 gl) { 
     GLU.gluLookAt(gl, 
      camera[0], camera[1], camera[2], 
      focus[0], focus[1], focus[2], 
      orientation[0], orientation[1], orientation[2] 
     ); 
    } 

    @Override 
    public void onSurfaceChanged(GL10 gl, int width, int height) { 
     int dim = Math.min(width, height); 
     gl.glViewport(0, 0, dim, dim); 
     gl.glMatrixMode(GL10.GL_PROJECTION); 
     gl.glLoadIdentity(); 
     gl.glFrustumf(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f); 
     gl.glMatrixMode(GL10.GL_MODELVIEW); 
     gl.glLoadIdentity(); 
     look(gl); 
    } 

    @Override 
    public void onDrawFrame(GL10 gl) { 
     gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
     square.draw(gl); 
     look(gl); 
    } 

    @Override 
    public boolean onTouch(View arg0, MotionEvent arg1) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

回答

0

显然,与z近/远值必须> 0。没有人告诉我这一点。因此,对于想知道为什么事情可怕的人,请确保这不是原因。