Написал вот такой класс:
| Код | 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(). Но что-то я по неопытности не так сделал. Кубик не рисуется. Подскажите, что я делаю не так? |