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)
}
}
}