

開発初心者の初投稿です。よろしくお願い致します。

現在，OpenGLを用いて，2つのImageView間をつなぐ直線を引くプログラムを作成しています。View間に直線を引く方法は分かったのですが，次段階としてViewを動かしてもView間が線でつながっている表現を行いたかったのですが，現状のコードではViewを移動させると，Viewの表示範囲を超えた段階でViewが隠れてしまいます。

下記のコードに対して，問題点をご指摘いただければ幸いです。

[code]

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ff00ff">
    
        <android.opengl.GLSurfaceView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/glview1">
        </android.opengl.GLSurfaceView>
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/droid1"
            android:layout_marginTop="158dp"
            android:src="@drawable/ic_launcher"
            android:layout_gravity="center" />
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/droid2"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:src="@drawable/ic_launcher" />
    
    
    </FrameLayout>
    
[/code]

* * *
[code]

     public class ClearActivity extends ActionBarActivity implements View.OnTouchListener {
    
          private GLSurfaceView mGLSurfaceVIew;
          private ClearRenderer mClearRenderer;
    
          private ImageView droid1;
          private ImageView droid2;
    
          private int droid1_LocalX;
          private int droid1_LocalY;
    
          private int droid2_LocalX;
          private int droid2_LocalY;
    
          private int screenX;
          private int screenY;
    
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              mClearRenderer = new ClearRenderer();
    
              setContentView(R.layout.activity_clear);
              mGLSurfaceVIew = (GLSurfaceView)findViewById(R.id.glview1);
              mGLSurfaceVIew.setRenderer(mClearRenderer);
              mGLSurfaceVIew.getHolder().setFormat(PixelFormat.TRANSLUCENT);
    
              droid1 = (ImageView)findViewById(R.id.droid1);
              droid2 = (ImageView)findViewById(R.id.droid2);
              droid1.setOnTouchListener(this);
              droid2.setOnTouchListener(this);
    
          }
    
          @Override
          protected void onStart() {
              super.onStart();
    
          }
    
          @Override
          onWindowFocusChanged(boolean hasFocus){
                super.onWindowFocusChanged(hasFocus);
              /*----------Viewの座標をもとに，直線の視点終点を設定------------*/
      　　　　setVertex(--------------);
          }
    
          @Override
          public boolean onTouch(View v, MotionEvent event) {
              return false;
          }
    
      class ClearRenderer implements GLSurfaceView.Renderer {
    
          public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    
              gl.glEnable(GL10.GL_ALPHA_TEST);
              gl.glColor(1.0f, 1.0f, 0.0f, 1.0f);
    
              vertex[0] = 1.0f;
              vertex[1] = 0.0f;
              vertex[2] = 0.0f;
    
              vertex[3] = 0.0f;
              vertex[4] = 0.0f;
              vertex[5] = 0.0f;
    
          }
    
          public void onSurfaceChanged(GL10 gl, int w, int h) {
              gl.glViewport(0, 0, w, h);
          }
    
          public void onDrawFrame(GL10 gl) {
    
              gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    
              gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
              gl.glVertexPointer(3,GL10.GL_FLOAT,0,makeFloatBuffer(vertex));
              gl.glDrawArrays(GL10.GL_LINE_LOOP,0,2);
          }
    
          //Floatバッファの生成
          public static FloatBuffer makeFloatBuffer(float[] arr) {
              ByteBuffer bb= ByteBuffer.allocateDirect(arr.length * 4);
              bb.order(ByteOrder.nativeOrder());
              FloatBuffer fb=bb.asFloatBuffer();
              fb.put(arr);
              fb.position(0);
              return fb;
          }
    
          public  void setVertex(float x1, float y1,float x2, float y2){
              vertex[0] = x1;
              vertex[1] = y1;
              vertex[3] = x2;
              vertex[4] = y2;
          }
    
          private float[] vertex = new float[6];
    }
    
[/code]


CC BY-SA 3.0
2015-02-08T04:04:37.673
6128
2015-02-08T11:20:20.153
2015-02-08T11:20:20.153
8142
8142
question
android opengl-es
OpenGLを用いてView間に直線を引く