あなたのActivityクラス(またはアクティビティを拡張するクラス)は次のようになります。
public class stackoverflowTest extends Activity {
GLSurfaceView glSurface;
MyRenderer myRenderer;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myRenderer = new MyRenderer(this);
//Create an instance of the Renderer with this Activity
glSurface = (GLSurfaceView) findViewById(R.id.graphics_glsurfaceview1);
//Set our own Renderer and hand the renderer this Activity Context
glSurface.setEGLConfigChooser(true);
glSurface.setRenderer(myRenderer);
//Set the GLSurface as View to this Activity
}
/**
* this is the method the button click calls
*/
public void changeRotationDirection(View v){
myRenderer.changeRotationDirection();
}
}
次に、あなたのレンダラで:基本的に
public class MyRenderer implements Renderer {
private float rotationDirection = 1.0f;
public MyRenderer(Context context){
this.context = context;
}
public void setRotationDirection(){
if(rotationDirection==1.0f){
rotationDirection=-1.0f;
} else {
rotationDirection=1.0f;
}
}
@Override
public void onDrawFrame(GL10 gl) {
// GL calls
gl.glRotatef(angle, rotateDirection, 0.0f, 0.0f);
// draw cube
gl.glDrawArrays(etc);
}
}
を、あなただけの前にキューブを回転させるようにglRotatef
を使用あなたはそれを描く。角度パラメータ(最初の値)またはx、y、z量パラメータのいずれかに反対の方向に回転するには、-ve値を使用します。 Renderer
へのメソッド呼び出しを使用して通信し、シーンを更新します。レンダラースレッドとメイン/ UIスレッド(ボタン呼び出しが行われた場所から)で同期の問題が発生する可能性があるため、このアプローチを慎重に使用してください。
ボタンをchangeRotationDirection
メソッドに呼び出すには、android:onClick="changeRotationDirection"
をXMLレイアウトボタンビューである必要はありません)。 XMLレイアウトで宣言されたボタンの方法は、フォームpublic void [methodname](View [paramname])
のものとボタンは、より高度なタッチコントロールについて
を押され、そこからアクティビティクラスでなければならず、エリックが提案またOnTouchListeners
をチェックアウトするようにチェックしなければなりません
(注:OpenGL-ES 2.0以上を使用している場合は、GLES20.glRotatef()
を使用してください)