###前提・実現したいこと
ダブルタップで別クラスで定義したメソッドを呼んで
画面上に表示した点の認識を行うことができるようにしようとしました。
しかしダブルタップをした瞬間に問題が発生し
「発生している問題・エラーメッセージ」の欄に書いてある
java.lang.IllegalArgumentException: length - offset < n
というエラーが発生していました。
このエラー自体はオラクルのホームページを見ると
「不正な引数、または不適切な引数をメソッドに渡したことを示すためにスローされます。」
という事みたいですが引数の何が不適切なのか
また「length - offset < n」がなにかわからない状態です。
「該当のソースコード」にはエラーメッセージで指摘されている場所が含まれるメソッドを記載しています。
そこでこのエラーを解決するのに必要な手順を教えていただけると幸いです。
よろしくお願いいたします。
###発生している問題・エラーメッセージ
java.lang.IllegalArgumentException: length - offset < n at android.opengl.Matrix.multiplyMV(Native Method) at android.opengl.GLU.gluUnProject(GLU.java:237)
###該当のソースコード
値を渡す側のメソッド
java
1@Override 2 public boolean onDoubleTap(MotionEvent motionEvent) { 3 4 int x = (int) motionEvent.getX(); 5 int y = (int) motionEvent.getY(); 6 float x1 = motionEvent.getX(); 7 float y1 = motionEvent.getY(); 8 9 float y2 = 1280-y1; 10 11 Log.d("y2", "y2 ;"+ y2); 12 13 PPS.PickUpPoint2(gl11,x1,y2); 14 15 Log.d("onDoubleTap", "x:" + x + ",y:" + y); 16 return false; 17 }
値を渡した側のメソッド
java
1 public boolean PickUpPoint2(GL11 gl11,float x1, float y2) { 2 3 int i, j, k; 4 int flagi = 0; 5 int flagj = 0; 6 int flagk = 0; 7 float dis, mindis; 8 9 PickUpPoint_flag = false; 10 11 mindis = 5.0f; 12 13 for (i = 0; i < ncpt[0]; i++) { 14 if (i == 0 || i == ncpt[0] - 1) { 15 flagi = 1; 16 } else { 17 flagi = 0; 18 } 19 for (j = 0; j < ncpt[1]; j++) { 20 if (j == 0 || j == ncpt[1] - 1) { 21 flagj = 1; 22 } else { 23 flagj = 0; 24 } 25 for (k = 0; k < ncpt[2]; k++) { 26 if (k == 0 || k == ncpt[2] - 1) { 27 flagk = 1; 28 } else { 29 flagk = 0; 30 } 31 32 if (flagi + flagj + flagk > 0) { 33 34 float CPX = CP[i][j][k][0]; 35 float CPY = CP[i][j][k][1]; 36 float CPZ = CP[i][j][k][2]; 37 38 gl11.glGetFloatv(GL11.GL_MODELVIEW_MATRIX, model_f, modelOffset); 39 gl11.glGetFloatv(GL11.GL_PROJECTION_MATRIX, project_f, projectOffset); 40 gl11.glGetIntegerv(GL11.GL_VIEWPORT, view, viewOffset); 41 42 GLU.gluUnProject( 43 x1, y2, 0, 44 model_f, modelOffset, 45 project_f, projectOffset, 46 view, viewOffset, 47 nearobj, nearobjOffset 48 ); 49 50 dis = (float) sqrt((nearobj[0] - CPX) * (nearobj[0] - CPX) + 51 (nearobj[1] - CPY) * (nearobj[1] - CPY) + (nearobj[2] - CPZ) * (nearobj[2] - CPZ)); 52 53 if (dis <= mindis) { 54 mindis = dis; 55 i_sel=i; 56 j_sel=j; 57 k_sel=k; 58 PickUpPoint_flag = true; 59 } 60 } 61 } 62 } 63 } 64 65 return PickUpPoint_flag; 66 } 67
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/01/22 08:24