0

opengl レンダラーのメイン UI スレッドから gluLookAt() を更新しようとしています。ボタンのコードの最後で requestRenderer() メソッドを試しましたが、eclipes で sme エラーが発生します。メイン UI スレッドからこれを行う最善の方法でしょうか?

Heres 私の 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

eyezのどこにも値を使用していませんRenderer

多分交換したくなると思います

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 に答える