У меня настроен gluUnProject для поиска мировых координат при прикосновении, например:
public synchronized void randomMethod(MotionEvent event){
if (event.getAction() == MotionEvent.ACTION_DOWN){
setx = event.getX();
sety = event.getY();
vector3(null);
}
}
public void vector3 (GL11 gl){
int[] viewport = new int[4];
float[] modelview = new float[16];
float[] projection = new float[16];
float winx, winy, winz;
float[] newcoords = new float[3];
gl.glGetIntegerv(GL11.GL_VIEWPORT, viewport, 0);
gl.glGetFloatv(GL11.GL_MODELVIEW_MATRIX, modelview, 0);
gl.glGetFloatv(GL11.GL_PROJECTION_MATRIX, projection, 0);
winx = (float)setx;
winy = (float)viewport[3] - sety;
winz = 0;
GLU.gluUnProject(winx, winy, winz, modelview, 0, projection, 0, viewport, 0, newcoords, 0);
posx = (int)newcoords[1];
posy = (int)newcoords[2];
posz = (int)newcoords[3];
}
newcoords затем используется в методе рисования для рисования квадрата в точке касания.
Однако этот код возвращает исключение NullPointerException.
07-31 20:17:40.008: ERROR/AndroidRuntime(448): Uncaught handler: thread main exiting due to uncaught exception
07-31 20:17:40.098: ERROR/AndroidRuntime(448): java.lang.NullPointerException
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at android.app.ui.GLSurfaceRenderer.vector3(GLSurfaceRenderer.java:65)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at android.app.ui.GLSurfaceRenderer.randomMethod(GLSurfaceRenderer.java:54)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at android.app.ui.Practice.onTouchEvent(Practice.java:37)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at android.app.Activity.dispatchTouchEvent(Activity.java:2064)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at android.view.ViewRoot.handleMessage(ViewRoot.java:1690)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at android.os.Handler.dispatchMessage(Handler.java:99)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at android.os.Looper.loop(Looper.java:123)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at android.app.ActivityThread.main(ActivityThread.java:4310)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at java.lang.reflect.Method.invokeNative(Native Method)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at java.lang.reflect.Method.invoke(Method.java:521)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-31 20:17:40.098: ERROR/AndroidRuntime(448): at dalvik.system.NativeStart.main(Native Method)
Строка 54 -
vector3(null);
Строка 65 -
gl.glGetIntegerv(GL11.GL_VIEWPORT, viewport, 0);
и строка 37 из Практического класса -
glSurfaceRenderer.randomMethod(event);
, который вызывается внутри touchEvent, с которым синхронизируется randomMethod.
Кто-нибудь знает, что вызывает исключение нулевого указателя
Спасибо