Java OpenGL绘图代码没有绘制任何内容

Java OpenGL绘图代码没有绘制任何内容,java,android,android-studio,opengl-es,Java,Android,Android Studio,Opengl Es,我有一个方法,应该画一个老虎机的单卷,但它似乎没有画我能看到的任何东西: void drawreel(GL10 gl) { float increment = 0.03f; for (float angle = 0; angle < 2.0f * Math.PI; angle += increment) { FloatBuffer vfb = MyDirectBuffer.getFloatBuffer(100);

我有一个方法,应该画一个老虎机的单卷,但它似乎没有画我能看到的任何东西:

   void drawreel(GL10 gl) {
        float increment = 0.03f;

        for (float angle = 0; angle < 2.0f * Math.PI; angle += increment) {
            FloatBuffer vfb = MyDirectBuffer.getFloatBuffer(100);
            FloatBuffer tfb = MyDirectBuffer.getFloatBuffer(100);
            FloatBuffer nfb = MyDirectBuffer.getFloatBuffer(100);

            float y = (float) Math.sin(angle);
            float z = (float) Math.cos(angle);
            float texturey = (float) (1.0f - angle / (2.0f * Math.PI));

            texturey = getYtexture(texturey);

            tfb.put(0);
            tfb.put(texturey);

            nfb.put(0);
            nfb.put(y);
            nfb.put(z);

            vfb.put(-0.39f);
            vfb.put(y);
            vfb.put(z);

            tfb.put(1);
            tfb.put(texturey);

            nfb.put(0);
            nfb.put(y);
            nfb.put(z);

            vfb.put(0.39f);
            vfb.put(y);
            vfb.put(z);

            float nexty = (float) Math.sin(angle + increment);
            float nextz = (float) Math.cos(angle + increment);

            texturey = (float) (texturey - increment / (2 * Math.PI));

            tfb.put(1);
            tfb.put(texturey);

            nfb.put(0);
            nfb.put(nexty);
            nfb.put(nextz);

            vfb.put(0.39f);
            vfb.put(nexty);
            vfb.put(nextz);

            tfb.put(0);
            tfb.put(texturey);

            nfb.put(0);
            nfb.put(nexty);
            nfb.put(nextz);

            vfb.put(-0.39f);
            vfb.put(nexty);
            vfb.put(nextz);

            gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
            //gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
            //gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);


            gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, tfb);
            gl.glNormalPointer(GL10.GL_FLOAT, 0, nfb);
            gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vfb);

            gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 4);
            int error = gl.glGetError();

            gl.glDisableClientState(GL10.GL_NORMAL_ARRAY);
            gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
            gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);


        }


    }
我调用了glGetError,它似乎总是返回0,表示没有错误

有人知道我怎么能弄明白为什么没有什么东西在抽丝吗


谢谢。

我通过确保代码在那里解决了这个问题:

            gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
            gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
            gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
            tfb.position(0);
            nfb.position(0);
            vfb.position(0);
浮动缓冲区需要倒回0。
另外,为了让老虎机画对,我需要启用所有三个客户端状态。

您以前是成功地画了一个简单的三角形(例如,通过遵循教程),还是直接跳到更复杂的绘图中?如果不了解更多关于代码的信息,就很难判断发生了什么,但是由于您没有收到任何错误,这可能是OpenGL无法检测到的问题。我能马上想到的问题:1)你的视图/屏幕投影可能是错误的2)你将三角形缠绕在错误的方向,因此遇到背面剔除3)你没有正确设置材质或照明4)纹理包含一个全0 alpha通道(不太可能)哦,顺便说一句,我假设您希望在循环之前初始化缓冲区,并在循环之后调用绘图代码。这实际上可能是你最大的问题还有:为什么你的x坐标都是固定的,但在正负值之间交替?嗯,有很多事情要做,所以把它归结为更简单的东西总是一个好主意。在任何情况下,我都看不到您在哪里构建着色器,着色器代码是什么样子,或者创建VAO或类似的东西,因此您需要提供这些。卷轴是否垂直于视图?如果执行
vfb.put(z)会发生什么;vfb.put(y);vfb.put(0)我在这里发布了代码:
            gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
            gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
            gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
            tfb.position(0);
            nfb.position(0);
            vfb.position(0);