Я работаю над созданием умеренно простых форм с помощью массивов вершин, и у меня неплохие успехи, но теперь я хочу нарисовать 2 (или более) треугольных веера объекты. Есть ли способ сделать только один вызов gl.glDrawArrays (GL.GL_TRIANGLE_FAN, ...
или мне нужно сделать отдельный вызов для каждого вентилятора?
Полоса треугольников Википедии описывает то, что называется примитивным перезапуском, но спецификация вершин OpenGL заставляет меня думать, что это не работает с массивами вершин.
Как правильно рисовать несколько вееров треугольников? Вот мой текущий рисунок method:
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 - это длина этого веера. .
Кажется, это работает, и это приятно, но все же это правильный способ сделать это? Есть ли лучший способ?