Отображение GL.POINTS и GL.LINES с использованием одного и того же массива вершин - Android OpenGL ES1.0 - PullRequest
1 голос
/ 01 апреля 2012

У меня есть массив вершин, состоящий из 3d точек (значения x, y, z для каждой точки).Я могу отобразить массив Vertex как GL.Points и GL.Lines.Можно ли отображать как GL.Points для половины точек, так и GL.LINES для остальных точек, используя ОДНОВРЕМЕННЫЙ Массив VERTEX ??

Спасибо.

1 Ответ

2 голосов
/ 01 апреля 2012

Да, вы должны быть в состоянии. Я не уверен, какую версию OpenGL ES вы используете, но вы можете проявить изобретательность в том, как настроить вызовы к glDrawArrays и glVertexAttribPointer. Например, если вы хотите нарисовать первую половину массива вершин в виде точек, а вторую половину - в виде линий, вызовите glDrawArrays дважды, как.

glDrawArrays(mode, first, count)

glDrawArrays(GL_POINTS, 0, vertexarray.length / 2);
glDrawArrays(GL_LINES,vertexarray.length / 2, vertexarray.length/2);

Это означает, что элементы от 0 до vertexarray.length / 2 обозначают как GL_POINTS, а элементы с vertexarray.length / 2 до vertexarray.length обозначают как GL_LINES. Эта техника должна быть доступна для GL ES 1.0 и GL ES 2.0.

Если вы используете GL ES 2.0, вы можете свободно упаковать данные вершин в свой массив вершин и использовать параметры шага и указателя для glVertexAttribPointer. Допустим, ваша первая и все остальные вершины должны быть нарисованы в виде точек, а остальные - в виде линий.

glVertexAttribPointer(index, size, type, normalized, stride, pointer)

glVertexAttribPointer(handle, 3, GL_FLOAT, false, (4*6), vertexarray.position(0));
glDrawArrays(GL_POINTS, 0, vertexarray.length / 2)

glVertexAttribPointer(handle, 3, GL_FLOAT, false, (4*6), vertexarray.position(1));
glDrawArrays(GL_LINES, 0, vertexarray.length / 2)

Шаг (4 * 6) указывает, сколько байтов нужно пропустить, чтобы достичь начала следующего атрибута. Здесь у нас есть 4 байта на число с плавающей запятой и 6 значений с плавающей запятой, которые нужно пропустить, чтобы найти начало следующего атрибута. По сути, вы говорите GL здесь, что вам нужно прочитать за текущим x0, y0, z0 и следующим x1, y1, z1, чтобы достичь следующей вершины, которая нам небезразлична для x2, y2, z2. В этом примере это будет рисовать x0, y0, z0 и x2, y2, z2 как точки, а x1, y1, z1 как линии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...