アンドロイドで回転球の例をgiven hereとしました。回転する球(地球)を示す簡単なアプリケーションを作成します。アンドロイドのGLSurfaceViewインスタンスでレンダリングを交換するにはどうすればいいですか?
GLSurfaceView
から派生したクラスでは、レンダラーを交換するために偶数(タッチスクリーンイベントのような)を待っています。現在のレンダラーがレンダリングを停止し、GLSurfaceView
が(別のオブジェクトを表示するために)別のレンダラーを使用する必要があります。
私は次のコードを使用しようとしました:私は停止/削除/「古い」レンダラを破壊しなければならないと思い
FATAL EXCEPTION: main
Process: com.jimscosmos.opengltexturedsphere, PID: 25708
java.lang.IllegalStateException: setRenderer has already been called for this instance.
、しかし:
public class MyGLSurfaceView extends GLSurfaceView {
Context mycontext;
MyGLSurfaceView(Context context) {
super(context);
mycontext = context;
}
public boolean onTouchEvent(MotionEvent event) {
int x = (int)event.getX();
int y = (int)event.getY();
Log.d("onTouchEvent",String.format("keyCode: %d coords: %d %d", event.getActionMasked(), x, y));
GlRenderer renderer = new GlRenderer(mycontext);
setRenderer(renderer);
return super.onTouchEvent(event);
}
}
次のエラーを与えます私はそれのために有用な何かを見つけませんでしたin the documentation。多分私のアプローチは完全に間違っていますか?もう何をすべきか?どのようにそれを正しく行うには?
いいえ、レンダラーを停止して変更しないでください。なぜ同じレンダラーでオブジェクトを交換しないのですか? – MarGenDo
'GLSurfaceView'の中からこれを行う方法は?多分あなたは例を参照することができますか? – Alex
いいえ、 'onDrawFrame'関数でレンダラーから変更してください。例: 'if(something){drawSphere1();} else {drawSphere2();}' – MarGenDo