нарисуйте основную прямоугольную границу в OpenGL для android

Я просто хочу нарисовать простую прямоугольную границу,
заполненный прямоугольник работает нормально, но я не могу найти простой способ просто нарисовать границу вот мой класс Rectangle.

Ниже приведен мой класс rectangle :

 package{

        import java.nio.ByteBuffer;
        import java.nio.ByteOrder;
        import java.nio.FloatBuffer;
        import java.nio.ShortBuffer;
        import javax.microedition.khronos.opengles.GL10;

        public class Rectangle {

            private float vertices[]={
                    -0.5f,0.5f, 0.0f,
                    -0.5f,-0.5f,0.0f,
                   0.5f,-0.5f,0.0f,
                    0.5f,0.5f,0.0f
            };


        // The colors mapped to the vertices.
        float[] colors = {
                1f, 0f, 0f, 1f, // vertex 0 red
                1f, 0f, 0f, 1f, // vertex 1 green
                1f, 0f, 0f, 1f, // vertex 2 blue
                1f, 0f, 0f, 1f, // vertex 3 magenta
        };

            private short[] indices = {0,1,2,0,2,3};

            private FloatBuffer vertexBuffer;
            private ShortBuffer indexBuffer;

        // Our color buffer.
        private FloatBuffer colorBuffer;

        public Rectangle(){
            ByteBuffer vbb  = ByteBuffer.allocateDirect(vertices.length * 4);
            vbb.order(ByteOrder.nativeOrder());
            vertexBuffer = vbb.asFloatBuffer();
            vertexBuffer.put(vertices);
            vertexBuffer.position(0);

            ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
            ibb.order(ByteOrder.nativeOrder());
            indexBuffer = ibb.asShortBuffer();
            indexBuffer.put(indices);
            indexBuffer.position(0);

            // float has 4 bytes, colors (RGBA) * 4 bytes
            ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length * 4);
            cbb.order(ByteOrder.nativeOrder());
            colorBuffer = cbb.asFloatBuffer();
            colorBuffer.put(colors);
            colorBuffer.position(0);
        }

        public void draw(GL10 gl){
            gl.glFrontFace(GL10.GL_CCW);
            gl.glEnable(GL10.GL_CULL_FACE);
            gl.glCullFace(GL10.GL_BACK);
            gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
            gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
            // Enable the color array buffer to be used during rendering.
            gl.glEnableClientState(GL10.GL_COLOR_ARRAY); // NEW LINE ADDED.

            // Point out the where the color buffer is.
            gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer); // NEW LINE ADDED.
            gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer);
            gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
            gl.glDisable(GL10.GL_CULL_FACE);
        }

    }

1 ответ

  1. В отличие от большинства API 2D-рисования OpenGL ES не имеет понятия автоматического «штриха» для заполненных фигур. Если вы хотите, чтобы контур вокруг сплошного заполненного участка, вам придется нарисовать его самостоятельно, например, с помощью GL_LINES или тонкой полосы треугольников.