7

尝试绘制一条三角形,如下所示:

GL_TRIANGLE_STRIP

完成了 objc.io教程,他们在其中使用两个三角形绘制了一个四边形。三角形是断开连接并单独绘制的,这意味着我需要指定 6 个顶点而不是 4 个。

// Interleaved vertex data X,Y,Z,W,  R,G,B,A
static float vertexData[] = {
    // First triangle: From bottom right, clockwise
     0.5, -0.5, 0.0, 1.0,     1.0, 0.0, 0.0, 1.0, // bottom right
    -0.5, -0.5, 0.0, 1.0,     0.0, 1.0, 0.0, 1.0, // bottom left
    -0.5,  0.5, 0.0, 1.0,     0.0, 0.0, 1.0, 1.0, // top left

    // Second triangle: From top right, clockwise
     0.5,  0.5, 0.0, 1.0,     1.0, 1.0, 0.0, 1.0, // top right
     0.5, -0.5, 0.0, 1.0,     1.0, 0.0, 0.0, 1.0, // bottom right
    -0.5,  0.5, 0.0, 1.0,     0.0, 0.0, 1.0, 1.0, // top left
};

有没有办法像在 OpenGL ES 中一样绘制条带而不复制顶点?

4

1 回答 1

8

简短的回答是这样的:

renderEncoder.drawPrimitives(MTLPrimitiveType.TriangleStrip, vertexStart: 0, vertexCount: 6)

它相当于GL_TRIANGLE_STRIP.

此外,您可能希望使用索引绘图,然后您将只加载每个顶点一次,之后您将需要使用顶点索引数组来指定绘制顺序。这样,您将通过不指定重复的顶点来保存数据。

这是索引绘图的调用。

renderEncoder.drawIndexedPrimitives(submesh.primitiveType, indexCount: submesh.indexCount, indexType: submesh.indexType, indexBuffer: submesh.indexBuffer.buffer, indexBufferOffset: submesh.indexBuffer.offset)

干杯!

于 2015-07-17T14:15:07.530 回答