繁体   English   中英

OpenGL 绘图代码未绘制任何内容

[英]OpenGL drawing code is not drawing anything

我有一种方法应该绘制老虎机的单个卷轴,但它似乎没有绘制我能看到的任何内容:

   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);


        }


    }

此外,这是另一个被调用的方法:

    static FloatBuffer getFloatBuffer(int numFloats)
    {
        ByteBuffer buffer = ByteBuffer.allocateDirect(numFloats);
        buffer.order(ByteOrder.nativeOrder());
        FloatBuffer newFloatBuffer = buffer.asFloatBuffer();
        return newFloatBuffer;
    }

我调用了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);

FloatBuffers 需要倒回到 0。另外,为了让老虎机正确绘制,我需要启用所有三个客户端状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM