Код рисования OpenGL ничего не рисует - PullRequest
0 голосов
/ 09 марта 2020

У меня есть метод, который должен рисовать один барабан игрового автомата, но он, кажется, не рисует ничего, что я вижу:

   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, что указывает на отсутствие ошибки.

Кто-нибудь знает, как я могу понять, почему ничто, кажется, не рисует в drawreel?

Спасибо.

1 Ответ

0 голосов
/ 13 марта 2020

Я решил это, убедившись, что этот код был там:

            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. Плюс, чтобы игровой автомат рисовал правильно, мне нужно было включить все три клиента государства.

...