0

我正在尝试从我的 opengl 渲染器的主 UI 线程更新 gluLookAt() 我在按钮的代码末尾尝试了 requestRenderer() 方法,但是 eclipes 给了我一些错误我只是想知道什么将是从主 UI 线程执行此操作的最佳方法吗?

这是我的 MainActivity 类:

public class MainActivity extends Activity implements OnClickListener {
GLSurfaceView ourSurface;
GLRenderer call;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ourSurface = new SurfaceView(this);
    setContentView(R.layout.activity_main);
    FrameLayout v = (FrameLayout) findViewById(R.id.Canvas);
    v.addView(ourSurface);
}
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()){
    case R.id.pluseyex:
        break;
    case R.id.minuseyex:
      break;    
    case R.id.pluseyey:
        break;
    case R.id.minuseyey:
        break;
    case R.id.pluseyez:
        float z =call.getEyez()+1;
        call.setEyez(z);


        break;
    case R.id.minuseyez:
        break;
    }


}

这是我的渲染器:

public class SurfaceView extends GLSurfaceView {

private final GLRenderer mRenderer;

public SurfaceView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
    mRenderer = new GLRenderer();
    setRenderer(mRenderer);
    setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}

public class GLRenderer implements Renderer {

    public volatile float eyez =-5;

      public float getEyez() {
        return eyez;
    }

    public void setEyez(float eyez) {
        this.eyez = eyez;
    }

    private GLTriEX tri;
    //private GLCubeEX cube;
    public GLRenderer(){
        tri = new GLTriEX();
        //cube = new GLCubeEX();
    }

    @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(.8f, 0f, .2f, 1f);
        gl.glClearDepthf(1f);
    }

    @Override
    public void onDrawFrame(GL10 gl) {
        // TODO Auto-generated method stub
        gl.glDisable(GL10.GL_DITHER);
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        GLU.gluLookAt(gl, 0, 0, -5, 0, 0, 0, 0, 2, 0);

        //long time = SystemClock.uptimeMillis()% 4000L;
        //float angle =.090f * ((int)time);
        //gl.glRotatef(angle, 1, 0, 2);

        tri.draw(gl);
        //cube.draw(gl);
    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        // TODO Auto-generated method stub
        gl.glViewport(0, 0, width, height);//bottom left corrnor
        float ratio = (float) width/height;
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glFrustumf(-ratio, ratio, -1, 1, 1, 25);
        //gl.glFrustumf(left, right, bottom, top, zNear, zFar)

    }



}


}
4

1 回答 1

0

您没有eyezRenderer.

我想你可能想更换

GLU.gluLookAt(gl, 0, 0, -5, 0, 0, 0, 0, 2, 0);

经过

GLU.gluLookAt(gl, 0, 0, eyez, 0, 0, 0, 0, 2, 0);

实际看到按下按钮的任何效果。

于 2013-07-12T02:05:45.723 回答