OpenGL ES: вершины / цветовые буферы / указатели - PullRequest
0 голосов
/ 28 июня 2011

У меня большой объем точек, которые я читаю из файла, который имеет значения как 3D-положения, так и RGB. Я изо всех сил пытаюсь сделать это через Java + Android + OpenGL (ES).

Я создаю буфер вершин и буфер цвета:

private FloatBuffer vertexBuffer, colorBuffer;

Закрепить мои вершины в буфере:

ByteBuffer vbb = ByteBuffer.allocateDirect(lasVertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(lasVertices);
vertexBuffer.position(0);   

И в моем розыгрыше (GL10 gl):

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glColorPointer(3, GL10.GL_FLOAT, 0, colorBuffer);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glPointSize(3);
gl.glDrawArrays(GL10.GL_POINTS, 0, 100);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

Который нарисует небольшой образец из 100 точек на экране, но без цвета. Я закрепил цвет в ColorBuffer, который я создал выше при запуске кода, например:

lasColors[i*3] = array[i].red;
lasColors[i*3+1] = array[i].green;
lasColors[i*3+2] = array[i].blue;

Но как я могу отобразить уникальные значения в шаге с позициями вершин?

Я попробовал то, что сделал с позициями:

vbb = ByteBuffer.allocateDirect(lasColors.length * 4);
vbb.order(ByteOrder.nativeOrder());
colorBuffer = vbb.asFloatBuffer();
colorBuffer.put(lasColors);
colorBuffer.position(0);

и показываю это в моей функции рисования:

gl.glColorPointer(3, GL10.GL_FLOAT, 0, colorBuffer);

... но результатов не было.

Спасибо за любую помощь !!

1 Ответ

1 голос
/ 28 июня 2011

Попробуйте включить массив цветов вместе с массивом вершин и посмотрите, работает ли он.

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
gl.glColorPointer(3, GL10.GL_FLOAT, 0, colorBuffer);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glPointSize(3);
gl.glDrawArrays(GL10.GL_POINTS, 0, 100);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
...