2012-01-13 18 views
0

私は3つのJavaクラスを作成しました。アンドロイドでOpenGLの助けが必要

  1. これはglsurfaceviewオブジェクトを持ち、レンダラークラスを呼び出します。
  2. これはレンダラークラスで、これはキューブクラスを呼び出します。
  3. これはキューブクラスです。

私がこのアプリケーションを実行すると、画面に回転キューブが表示されます(レンダリングクラスで回転しました)。しかし、私はキューブの回転の方向を制御したいと私は2つのボタンを設定しました。これは、私がボタンがキューブの動きを制御することを知らないので、私は助けが必要です。私はAndroidの初心者なので、あなたが私のためにいくつかのコードを残すことができれば、それはちょうど素晴らしいだろう。

答えて

1

あなたの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()を使用してください)

0

sdkからTouchRotateActivityの例を参照してください。私が間違っていない場合は、samples/platform/api-demosフォルダにあります。