Ваш класс Activity (или ваш класс, который расширяет 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
, чтобы вращать куб перед тем, как нарисовать его. Используйте параметр -ve vales для параметра угла (первого) или параметров количества x, y, z для поворота в противоположном направлении. Используйте вызовы метода к Renderer
, чтобы связаться с ним и обновить сцену. Используйте этот подход с осторожностью, поскольку у потока Renderer и потока Main / UI (откуда выполняется вызов кнопки) могут возникнуть проблемы с синхронизацией
Чтобы кнопка вызывала метод changeRotationDirection
, просто добавьте android:onClick="changeRotationDirection"
в макет XML (любого вида. Не обязательно должен быть просто вид кнопки). Любые методы кнопок, объявленные в макете XML, должны иметь форму public void [methodname](View [paramname])
и должны находиться в классе Activity, из которого нажата кнопка
Для более продвинутого сенсорного управления, проверьте, как предложил Эрик, а также проверьте OnTouchListeners
(Примечание: если вы используете openGL-ES 2.0 или выше (Android 2.2+), тогда используйте GLES20.glRotatef()
)