###前提・実現したいこと
該当のソースコードに記載している場所(2か所)でNullPointerExceptionが出てしまいました。
そこでデバッグしてどこが問題なのかというのを探ってみると
1つ目のソースコードに記載している
「calc.PickUpPoint(gl11,4.0f,x,y)」
の引数であるgl11にnullが入ってしまっていることがわかりました。
そこでここのnullを解決できればいいと思うのですが
どうやってgl11という引数に値を入れられるようにすればいいのかがわかりません。
というのも3つ目のソースコードにあるonDrawFrameメソッドでは
同じようにgl11を引数とする呼び出しをしているのですが
デバッグをしてみるときちんとnullではない値が入っていました。
なぜなのかということを考えた時にonDrawFrameメソッドの引数にglが使われており
それをキャストすることで定義しているからではないかと考えました。
それで1つ目のソースコードを見てみるとgl11に何か値を入れるような書き方はしていません。
しかし同じようにキャストしても意味がなかったうえに
インスタンスの生成のようなことをすると赤線が出て
解決の提案として「Implement method」と表示されしまいます。
そこでどうすればgl11に値が入るようになるのかご教授いただきたく今回質問させていただきました。
###発生している問題・エラーメッセージ
NullPointerExceptionが出た場所を記載します。
1つ目のソースコード:calc.PickUpPoint(gl11,4.0f,x,y)
2つ目のソースコード:glGetFloatv(GL11.GL_MODELVIEW_MATRIX,modelview,model_offset)
modelview,model_offsetは該当のソースコードには記載していませんが
2つめのソースコードが記載されているクラスで定義しています。
###該当のソースコード
1つ目
java
1public class Deformation extends GLSurfaceView{ 2 3 MyRenderer myRenderer; 4 Calculation calc = new Calculation(); 5 GL10 gl10; 6 GL11 gl11;//ここでGL11 gl11 = (GL11) gl10;としても意味なし 7 //GL11 gl11 = new GL11();とすると赤線が出てメソッドの実装が言われる 8 9 10 public DeformationGLView(Context context) { 11 super(context); 12 myRenderer = new MyRenderer(); 13 setRenderer(myRenderer); 14 } 15 16 final float TOUCH_SCALE_FACTOR = 0.2f; 17 final float MULTI_TOUCH_SCALE_FACTOR = 0.01f; 18 private float mPreviousX0; 19 private float mPreviousY0; 20 21 @Override 22 public boolean onTouchEvent(MotionEvent event) { 23 int Action = event.getAction(); 24 int Count = event.getPointerCount(); 25 float X0 = event.getX(0); 26 float Y0 = event.getY(0); 27 final int x = (int) event.getX(); 28 final int y = (int) event.getY(); 29 30 31 32 switch (Action & MotionEvent.ACTION_MASK) { 33 case MotionEvent.ACTION_DOWN: 34 35 calc.PickUpPoint(gl11,4.0f,x,y);//ここでエラー発生 36 //ここの引数gl11でnullが入ってしまう 37 38 if(calc.PickUpPoint(gl11,4.0f, x, y)==true) { 39 Toast.makeText(getContext(), "true", Toast.LENGTH_SHORT).show(); 40 } 41 42 else{ 43 Toast.makeText(getContext(),"false",Toast.LENGTH_SHORT).show(); 44 } 45
2つ目
java
1 public boolean PickUpPoint(GL11 gl11,float r,int x, int y){ 2 int i, j, k; 3 4 float dis,maxdis,mindis; 5 maxdis = r*r; 6 mindis= r*r; 7 8 boolean flag = false; 9 10 for(i=0; i<ncpt[0]; i++){ 11 for(j=0;j<ncpt[1];j++){ 12 for(k=0;k<ncpt[2];k++){ 13 float CPX = CP[i][j][k][0]; 14 float CPY = CP[i][j][k][1]; 15 float CPZ = CP[i][j][k][2]; 16 17 //glGetFloatv,glGetIntegervでエラー発生 18 gl11.glGetFloatv(GL11.GL_MODELVIEW_MATRIX,modelview,model_offset); 19 gl11.glGetFloatv(GL11.GL_PROJECTION_MATRIX,projection,projection_offset); 20 gl11.glGetIntegerv(GL11.GL_VIEWPORT,viewport,viewport_offset); 21 22 GLU.gluProject( 23 CPX, CPY, CPZ, 24 model_f,modelOffset, 25 project_f,projectOffset, 26 view,viewOffset, 27 win[0],winOffset 28 ); 29 30 if ((dis = (x-win[0][0])*(x-win[0][0])+(y-win[0][1])*(y-win[0][1])) < maxdis) { 31 32 flag = true; 33 if (dis < mindis) { 34 mindis = dis; 35 } 36 }else { 37 38 } 39 } 40 } 41 } 42 return flag; 43}
3つ目
java
1public void onDrawFrame(GL10 gl) { 2 3 long start = System.currentTimeMillis(); 4 5 gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 6 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 7 8 gl.glMatrixMode(GL10.GL_MODELVIEW); 9 gl.glLoadIdentity(); 10 gl.glTranslatef(0.0f, 0.0f, TrancelateZ - 10.0f); 11 12 gl.glRotatef(RotateX, 0, 1, 0);//Y軸中心の回転 13 gl.glRotatef(RotateY, 1, 0, 0);//X軸中心の回転 14 15 GL11 gl11 = (GL11) gl; 16 //ここでキャストして定義しているからGL11に値が入るようになると考えている 17 if (Draw == true) { 18 calc.Draw(gl,gl11);//デバッグするとここのgl11には値が入っている 19 } 20 21
###補足情報(言語/FW/ツール等のバージョンなど)
Java
OpenGL ES 1.0
OpenGL ES 1.1
Android Studio

回答2件
あなたの回答
tips
プレビュー