我正在使用顶点数组制作一些适度简单的形状,并且取得了一些不错的进展,但现在我想绘制 2 个(或更多)三角形扇形对象。有什么方法可以只打一个电话gl.glDrawArrays(GL.GL_TRIANGLE_FAN,...
还是我需要为每个粉丝打一个单独的电话?
Wikipedia 的Triangle strip文章描述了一种叫做原始重启的东西,但是 OpenGL 的顶点规范让我认为这不适用于顶点数组。
绘制多个三角扇的正确方法是什么?这是我当前的绘制方法:
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);
}
编辑
我更新了 draw 的相关部分,如下所示:
for(int i = 0; i < fanLength.length; i++){
gl.glDrawArrays(GL.GL_TRIANGLE_FAN,
triangleCount+quadCount+fanDist[i], fanLength[i]);
}
其中 fanDist 是这个扇形起点的偏移量(从扇形起点开始),而 fanLength 是这个扇形的长度。
这似乎确实有效,这很好,但是,这是正确的方法吗?有没有更好的办法?