Я работаю над созданием умеренно простых фигур с массивами вершин, и у меня неплохо получается, но теперь я хочу нарисовать 2 (или более) треугольных веерных объекта. Есть ли способ сделать только один вызов gl.glDrawArrays(GL.GL_TRIANGLE_FAN,...
или мне нужно сделать отдельный вызов для каждого вентилятора?
Статья Википедии Полоса треугольника описывает нечто, называемое примитивным перезапуском, но Спецификация вершин заставляет меня думать, что это не работает с массивами вершин.
Как правильно нарисовать несколько треугольных вееров? Вот мой текущий метод рисования:
public void draw(GL gl){
if(vertices.length == 0)
return;
gl.glEnableClientState(GL.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL.GL_COLOR_ARRAY);
gl.glEnableClientState(GL.GL_NORMAL_ARRAY);
gl.glVertexPointer(3, GL.GL_FLOAT, 0, vertBuff);
gl.glColorPointer(3, GL.GL_FLOAT, 0, colorBuff);
gl.glNormalPointer(GL.GL_FLOAT,0, normalBuff);
// drawArrays count is num of points, not indices.
gl.glDrawArrays(GL.GL_TRIANGLES, 0, triangleCount);
gl.glDrawArrays(GL.GL_QUADS, triangleCount, quadCount);
gl.glDrawArrays(GL.GL_TRIANGLE_FAN, triangleCount+quadCount, fanCount);
gl.glDisableClientState(GL.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL.GL_COLOR_ARRAY);
gl.glDisableClientState(GL.GL_NORMAL_ARRAY);
}
Редактировать
Я обновил соответствующий раздел рисования следующим образом:
for(int i = 0; i < fanLength.length; i++){
gl.glDrawArrays(GL.GL_TRIANGLE_FAN,
triangleCount+quadCount+fanDist[i], fanLength[i]);
}
Где fanDist — смещение (от начала вентиляторов) начала этого вентилятора, а fanLength — длина этого вентилятора.
Кажется, это работает, и это хорошо, но все же, это правильный способ сделать это? Есть ли способ лучше?