0

タッチスクリーン入力を介してOpenglシェイプを変更/再描画するにはどうすればよいですか?

私の現在の試みは、タッチイベントをリッスンし、x値とy値を取得します。これを使用して、XY平面でのタッチスクリーン入力に基づいて形状マトリックスの頂点を書き直します。

編集:タッチイベントの読み取りと形状マトリックスのエントリの更新の両方を行うことができましたverticies

ただし、プログラムを実行すると起動しますが、タッチイベントを入力するとすぐにクラッシュします。

これが私の更新されたコードです:

public class MainActivity extends Activity{
float x;
float y;
public float verticies[]={3,4,0,3,-4,0,-3,-4,0,-3,4,0};
public FloatBuffer vertBuff;

    GLSurfaceView mysurface; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);


        mysurface = new GLSurfaceView(this);

        mysurface.setRenderer(new MyRenderer());
        setContentView(mysurface);

        mysurface.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

    }
    @Override
    public boolean onTouchEvent(MotionEvent e) {
        // MotionEvent reports input details from the touch screen
        // and other input controls. In this case, you are only
        // interested in events where the touch position changed.



        switch (e.getAction()) {

        case MotionEvent.ACTION_MOVE:
             x = e.getX()/100;
            y = e.getY()/100;


            verticies[0]=x;
            verticies[1]=y;
            vertBuff.put(verticies);      



                mysurface.requestRender();
                break;
        }

OnDrawframeが頂点入力の更新を好まないか、nullポインター例外エラーが発生するいずれかの方法でバッファーの更新に不規則性があると推測しています。

    07-05 19:52:12.067: W/dalvikvm(633): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
07-05 19:52:12.087: E/AndroidRuntime(633): FATAL EXCEPTION: main
07-05 19:52:12.087: E/AndroidRuntime(633): java.lang.NullPointerException
07-05 19:52:12.087: E/AndroidRuntime(633):  at com.example.touch_test.MainActivity.onTouchEvent(MainActivity.java:57)
07-05 19:52:12.087: E/AndroidRuntime(633):  at android.app.Activity.dispatchTouchEvent(Activity.java:2367)
07-05 19:52:12.087: E/AndroidRuntime(633):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1840)
07-05 19:52:12.087: E/AndroidRuntime(633):  at android.view.View.dispatchPointerEvent(View.java:5662)
07-05 19:52:12.087: E/AndroidRuntime(633):  at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2863)
07-05 19:52:12.087: E/AndroidRuntime(633):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
07-05 19:52:12.087: E/AndroidRuntime(633):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-05 19:52:12.087: E/AndroidRuntime(633):  at android.os.Looper.loop(Looper.java:137)
07-05 19:52:12.087: E/AndroidRuntime(633):  at android.app.ActivityThread.main(ActivityThread.java:4340)
07-05 19:52:12.087: E/AndroidRuntime(633):  at java.lang.reflect.Method.invokeNative(Native Method)
07-05 19:52:12.087: E/AndroidRuntime(633):  at java.lang.reflect.Method.invoke(Method.java:511)
07-05 19:52:12.087: E/AndroidRuntime(633):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-05 19:52:12.087: E/AndroidRuntime(633):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-05 19:52:12.087: E/AndroidRuntime(633):  at dalvik.system.NativeStart.main(Native Method)

どうすればいいですか?ありがとう

4

2 に答える 2

3

どうやら、verticiesは初期化時に*_x*と*_y*を取得しますが、その後は更新されません。touchEventで頂点を再度設定すると、おそらく想定どおりに機能します。

于 2012-07-03T15:52:36.597 に答える
1

これを行うには、バッファをリセットしてクリアする必要がありました。これを行うには、ループでclearbufferコマンドを使用するだけです。これにより、形状を構成する頂点の更新を遅らせることができます

于 2012-10-10T00:09:43.093 に答える