OpenGL / JOGL: несколько вееров треугольников в массиве вершин

Я работаю над созданием умеренно простых форм с помощью массивов вершин, и у меня неплохие успехи, но теперь я хочу нарисовать 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);
}

Edit

Я обновил соответствующий раздел рисования следующим образом:

    for(int i = 0; i < fanLength.length; i++){
        gl.glDrawArrays(GL.GL_TRIANGLE_FAN, 
            triangleCount+quadCount+fanDist[i], fanLength[i]);
    }

Где fanDist - это смещение (от начала вентиляторов) начала этого веера, а fanLength - это длина этого веера. .

Кажется, это работает, и это приятно, но все же это правильный способ сделать это? Есть ли лучший способ?

10
задан dimo414 8 December 2010 в 11:54
поделиться