###前提・実現したいこと
3次元空間に点が複数個表示されるプログラムがあります。
その中のどれか一点をタッチすると
「点がタッチされました」というトーストを出すようにしたいです。
おそらくタッチした座標を読み取ってそれが点だったら
メッセージを出すようにすればいいのかなと思って参考書籍として
「OpenGL ES 2.0 Androidグラフィックスプログラミング」という本を借りました。
その9章に「物体を選択する」という項目があるのでそれを参考にしたのですが
OpenGL ES 2.0と1.0では勝手が違い過ぎて何を使えばいいのかがわかりませんでした。
お力を貸していただけると幸いです。
ソースコードは点を描画するメソッドとタッチ操作に関するクラスを記載しています。
###該当のソースコード
「Calculation.java」点を描画するプログラム
java
1public class Calculation { 2//省略 3public static int[] ncpt = new int[3]; 4//省略 5 6void DrawPOINT(GL10 gl) { 7 8 float[] pt = new float [3*ncpt[0]*ncpt[1]*ncpt[2]]; 9 int i,j,k,idx; 10 11 FloatBuffer CubeControlPointVertex_buff = null; 12 FloatBuffer CubeControlPointDiffuse_buff = null; 13 FloatBuffer CubeControlPointSpecular_buff = null; 14 FloatBuffer CubeControlPointShininess_buff = null; 15 FloatBuffer CubeControlPointEmission_buff = null; 16 final float CubeControlPointDiffuse[] = {0.0f, 0.5f, 1.0f, 1.0f}; 17 final float CubeControlPointSpecular[] = {0.0f, 0.5f, 1.0f, 1.0f}; 18 final float CubeControlPointShininess[] = {100.0f}; 19 final float CubeControlPointEmission[] = {0.0f, 0.5f, 1.0f, 1.0f}; 20 21 for(i=0;i<ncpt[0];i++){ 22 for(j=0;j<ncpt[1];j++){ 23 for(k=0;k<ncpt[2];k++){ 24 idx = 3*ncpt[1]*ncpt[2]*i+3*ncpt[2]*j+3*k; 25 pt[idx+0] =CP[i][j][k][0]; 26 pt[idx+1] =CP[i][j][k][1]; 27 pt[idx+2] =CP[i][j][k][2]; 28 } 29 } 30 } 31 32 CubeControlPointVertex_buff = toBuffer(pt, CubeControlPointVertex_buff); 33 CubeControlPointDiffuse_buff = toBuffer(CubeControlPointDiffuse, CubeControlPointDiffuse_buff); 34 CubeControlPointSpecular_buff = toBuffer(CubeControlPointSpecular, CubeControlPointSpecular_buff); 35 CubeControlPointShininess_buff = toBuffer(CubeControlPointShininess, CubeControlPointShininess_buff); 36 CubeControlPointEmission_buff = toBuffer(CubeControlPointEmission, CubeControlPointEmission_buff); 37 38 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 39 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, CubeControlPointVertex_buff); 40 41 gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, CubeControlPointDiffuse_buff); 42 gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_SPECULAR, CubeControlPointSpecular_buff); 43 gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_SHININESS, CubeControlPointShininess_buff); 44 gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_EMISSION, CubeControlPointEmission_buff); 45 46 gl.glPointSize(10.0f); 47 gl.glDrawArrays(GL10.GL_POINTS,0,ncpt[0]*ncpt[1]*ncpt[2]); 48 49 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 50 }
「MyGLView」タッチ操作等が書かれたプログラム(この中にタッチしたら「点がタッチされました」と表示されるようにプログラムを組みたい)
java
1public class MyGLView extends GLSurfaceView { 2 MyRenderer myRenderer; 3 4 public MyGLView(Context context) { 5 super (context); 6 myRenderer = new MyRenderer(); 7 setRenderer(myRenderer); 8 9 } 10 11 final float TOUCH_SCALE_FACTOR = 0.2f; 12 private float mPreviousX0; 13 private float mPreviousY0; 14 private float mPreviousX1; 15 private float mPreviousY1; 16 17 18 @Override 19 public boolean onTouchEvent(MotionEvent event) { 20 int Action = event.getAction(); 21 int Count = event.getPointerCount(); 22 float X0 = event.getX(0); 23 float Y0 = event.getY(0); 24 float X1 = (Count >= 2) ? ((float)event.getX(1)) : X0; 25 float Y1 = (Count >= 2) ? ((float)event.getY(1)) : Y0; 26 switch (Action & MotionEvent.ACTION_MASK) { 27 case MotionEvent.ACTION_DOWN: 28 29 //ここにタッチすると「点がタッチされました」と出るようにプログラムを組み込みたい 30 31 case MotionEvent.ACTION_UP: 32 break; 33 case MotionEvent.ACTION_POINTER_UP: 34 break; 35 case MotionEvent.ACTION_MOVE: 36 if(Count == 1) { 37 float DX0 = X0 - mPreviousX0; 38 float DY0 = Y0 - mPreviousY0; 39 myRenderer.RotateX += DX0 * TOUCH_SCALE_FACTOR; 40 myRenderer.RotateY += DY0 * TOUCH_SCALE_FACTOR; 41 42 }else{ 43 break; 44 } 45 } 46 mPreviousX0 = X0; 47 mPreviousY0 = Y0; 48 mPreviousX1 = X1; 49 mPreviousY1 = Y1; 50 return true; 51 } 52 53} 54
###補足情報(言語/FW/ツール等のバージョンなど)
Android Studio 2.1.3
OpenGL ES 1.0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/11/16 01:04