我将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];
}然后在draw方法中使用新坐标在接触点绘制一个正方形。
但是,这段代码返回一个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);它在randomMethod被同步到的touchEvent内部调用。
有人知道是什么导致空指针异常吗?
谢谢
发布于 2011-08-01 04:52:27
GLU.gluUnProject似乎与你得到的NullPointerException无关。
您正在呼叫:
vector3(null);因此,在函数vector3(GL11 Gl)中:
gl.glGetIntegerv(GL11.GL_VIEWPORT, viewport, 0);因为gl为空而引发NPE。
您需要初始化GL11实现,即:
OpenGLContext glContext = new OpenGLContext(OpenGLContext.DEPTH_BUFFER);
GL11 gl = (GL11)glContext.getGL();https://stackoverflow.com/questions/6892173
复制相似问题