有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java OpenGL空指针异常

我正在尝试用OpenGL创建一个三维立方体。得到了三维立方体。正在尝试添加多维数据集的另一面。这里我看到了这个错误:

LogCat告诉我

triangle1Buffer = NULL

    FATAL EXCEPTION: GLThread 270
    java.lang.NullPointerException
            at com.google.安卓.gles_jni.GLImpl.glVertexPointer(GLImpl.java:1122)
            at com.podlinov.elseapp.app.Renderer.onDrawFrame(Renderer.java:94)

代码:

public class Renderer implements GLSurfaceView.Renderer {

    @Override
    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {

    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {

        gl.glViewport(0, 0, width, height);
        float ratio = (float) width / height;
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
    }

    float [] triangle = {
            0, 0, 0,   // A
            1, 0, 0,   // B
            0, 1, 0 ,  // C

            1, 0, 0,   // B
            1, 1, 0 ,  // D
            0, 1, 0 ,  // C
    };

    float [] triangle2 = {
            0, 0, 0,   // A
            1, 0, 0,   // B
            0, 1, 0,  // C
    };


    FloatBuffer triangleBuffer;
    FloatBuffer triangle1Buffer;

    public Renderer() {

        ByteBuffer bb = ByteBuffer.allocateDirect(6*3*4);
        bb.order(ByteOrder.nativeOrder());
        triangleBuffer = bb.asFloatBuffer();
        triangleBuffer.put(triangle);
        triangleBuffer.position(0);

        ByteBuffer bb2 = ByteBuffer.allocateDirect(3*3*4);
        bb2.order(ByteOrder.nativeOrder());
        triangleBuffer = bb2.asFloatBuffer();
        triangleBuffer.put(triangle2);
        triangleBuffer.position(0);

    }

    @Override
    public void onDrawFrame(GL10 gl) {

        gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

        gl.glColor4f(1,0,1,1);
        gl.glTranslatef(-1.5f, 0.5f, -3f);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleBuffer);
        gl.glDrawArrays(GL10.GL_TRIANGLES, 0,6);


        gl.glColor4f(0,0,1,1);
        gl.glTranslatef(1.5f, 0, -3f);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangle1Buffer); // NULL POINTER EXCEPTION triangle1Buffer =NULL
        gl.glDrawArrays(GL10.GL_TRIANGLES, 0,3);
    }

}

共 (1) 个答案

  1. # 1 楼答案

    我认为你的问题在于:

        ByteBuffer bb2 = ByteBuffer.allocateDirect(3*3*4);
        bb2.order(ByteOrder.nativeOrder());
        triangleBuffer = bb2.asFloatBuffer();
        triangleBuffer.put(triangle2);
        triangleBuffer.position(0);
    

    你应该把它改成三角形,我猜是吧