Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование игр, графики и искусственного интеллекта > JOGL (OpenGL) Index и Vertex буфферы.


Автор: Norby89 6.3.2011, 16:38
Написал вот такой класс:
Код

public class Box implements DrawableObject {

    Point3D p1;
    Point3D p2;
    double[] vertices;
    byte[] indexes = {
        0, 1, 2, 3,
        5, 6, 7, 8,
        1, 2, 6, 5,
        4, 3, 7, 8,
        1, 4, 8, 5,
        2, 3, 7, 6
    };
    DoubleBuffer vertexBuf;
    ByteBuffer indexBuf;

    public Box(Point3D p1, Point3D p2) {
        this.p1 = p1;
        this.p2 = p2;
        vertices = new double[]{
                    p1.x, p1.y, p1.z,
                    p2.x, p1.y, p1.z,
                    p2.x, p1.y, p2.z,
                    p1.x, p1.y, p2.z,
                    p1.x, p2.y, p1.z,
                    p2.x, p2.y, p1.z,
                    p2.x, p2.y, p2.z,
                    p1.x, p2.y, p2.z
        };
        vertexBuf = ByteBuffer.allocateDirect(Double.SIZE / 8 * vertices.length).asDoubleBuffer();
        indexBuf = ByteBuffer.allocateDirect(Byte.SIZE / 8 * indexes.length);
        vertexBuf.put(vertices);
        indexBuf.put(indexes);
        vertexBuf.rewind();
        indexBuf.rewind();
    }

    @Override
    public void draw(GL2 gl) {
        
        gl.glEnableClientState(GL2.GL_INDEX_ARRAY);
        gl.glEnableClientState(GL2.GL_VERTEX_ARRAY);
        gl.glVertexPointer(3, GL2.GL_DOUBLE, 0, vertexBuf);
        gl.glIndexPointer(GL2.GL_UNSIGNED_BYTE, 0, indexBuf);

        //Так рисуется
        gl.glBegin(GL2.GL_QUADS);
        //Рисуем одну грань
            gl.glVertex3d(vertices[0], vertices[1], vertices[2]);
            gl.glVertex3d(vertices[3], vertices[4], vertices[5]);
            gl.glVertex3d(vertices[6], vertices[7], vertices[8]);
            gl.glVertex3d(vertices[9], vertices[10], vertices[11]);
        gl.glEnd();

        //Так не работает
        /*gl.glBegin(GL2.GL_QUADS);
            //Рисуем одну грань
            gl.glArrayElement(0);
            gl.glArrayElement(1);
            gl.glArrayElement(2);
            gl.glArrayElement(3);
        gl.glEnd();*/

        //И так тоже
        //gl.glDrawElements(GL2.GL_QUADS, 1, GL2.GL_UNSIGNED_BYTE, indexBuf);

        gl.glDisableClientState(GL2.GL_INDEX_ARRAY);
        gl.glDisableClientState(GL2.GL_VERTEX_ARRAY);
    }
}


Отметил места как не работает. Хотелось бы рисовать glDrawElements(). Но что-то я по неопытности не так сделал. Кубик не рисуется. Подскажите, что я делаю не так?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)