###前提・実現したいこと
OpenGL ES 1.0で表示させた3次元空間上の点の色を読み取ろうと考えて
タッチした場所のピクセル値を読み取りその色が点の色だったら
「点が選択されています」という表示を出そうと思いました。
しかしなかなかうまくいかないため原因を探ろうと思って
Android Studioのログ上でタッチした場所のピクセル値を吐き出すようにしました。
すると点の部分はおろかどの部分をタッチしてもピクセル値はすべて-1となってしまいました。
背景は下のプログラムにありますように真っ白なので背景をタッチしたときに
ピクセル値としてはすべてに255が入らないとまずいと思います。
予測している原因としてはglReadPixelsがそもそもうまくいっていないか
読み取ったピクセル値がうまく配列に入っていないからなのかと思うのですが
いまいち何が悪いのかはっきりしないのでお力をお貸しいただけると幸いです。
###発生している問題・エラーメッセージ
吐き出されているログ
//タッチした場所の座標をint型で定義 D/TouchEvent: x:361,y:792 //タッチした場所のピクセル値(RGBA順) D/Pixel: 0:-1,1:-1,2:-1,3:-1
###該当のソースコード
画面をタッチした時のプログラム
java
1final int x = (int) event.getX(); 2final int y = (int) event.getY(); 3final byte pixel[] = new byte[4]; 4final ByteBuffer bb_pixel = ByteBuffer.allocateDirect(pixel.length); 5bb_pixel.order(ByteOrder.nativeOrder()); 6bb_pixel.put(pixel); 7bb_pixel.position(0); 8switch (Action & MotionEvent.ACTION_MASK) { 9 case MotionEvent.ACTION_DOWN: 10 queueEvent(new Runnable() { 11 @Override 12 public void run() { 13 GLES10.glReadPixels(x,y,1,1,GLES10.GL_RGBA,GLES10.GL_UNSIGNED_BYTE,bb_pixel); 14 Log.d("TouchEvent","x:"+x+",y:"+y); 15 Log.d("Pixel","0:"+bb_pixel.get(0)+",1:"+bb_pixel.get(1)+",2:"+bb_pixel.get(2)+",3:"+bb_pixel.get(3)); 16 if (bb_pixel.get(0)==(byte)0) 17 { 18 Toast.makeText(getContext(),"選択されました",Toast.LENGTH_SHORT).show(); 19 } 20 } 21 }); 22
背景の定義
java
1@Override 2 public void onDrawFrame(GL10 gl) { 3 4 gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//背景カラー(白) 5 6 以下省略 7 8 }
###補足情報(言語/FW/ツール等のバージョンなど)
OpenGL ES 1.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/18 01:14
2016/11/18 04:34
2016/11/18 04:42
退会済みユーザー
2016/11/19 12:28