我如何使用GLTriangleBatch

时间:2014-04-24 16:05:34

标签: c++ opengl geometry batch-processing

我正在开发一个真实世界的应用程序,用于在屏幕上渲染纯白色多边形,并随着时间的推移更改其alpha值。我正在尝试学习如何使用GLTriangleBatch来执行此操作(我很了解C ++,但不是很了解OpenGL),并且无法在线找到任何好的示例。到目前为止,我已经找到了一些资源,这些资源使我将下面的代码放在一起,但我仍然对某些部分感到困惑:

GLTriangleBatch myTriangles;
myTriangles.BeginMesh(1000000); // Include how many vertices you have: 1???
myTriangles.AddTriangle(...);   // Add a triangle: 2???

// Repeat for all triangles for this batch
myTriangles.End();  // Done adding triangles
myTriangles.Draw(); // Draw the triangles

我用???标记了我感到困惑的部分,问题显示如下:

  • 问题1:这个顶点的数量是否必须精确,或者是否可以高估和/或低估?此外,这个顶点数量是代表“批处理”顶点,还是每个三角形的各个顶点(例如2个连接的三角形有2个共享顶点需要6个顶点或4个?)

  • 问题2:参数是:

    • M3DVector3f verts [3]:我假设三角形的3个顶点
    • M3DVector3f vNorms:这是什么,我该如何设置?
    • M3DVector2f vTexCoords [3]:我认为这与纹理有关,我想要的只是一个白色三角形,并且能够改变它的alpha值。我该如何设置?

1 个答案:

答案 0 :(得分:3)

这个GLTriangleBatch类显然是随OpenGL超级圣经书提供的框架的一部分。它不是OpenGL标准的一部分(OpenGL是普通的C API)。

至于第一个问题,我假设nMaxVerts的{​​{1}}参数是你想要绘制的顶点的上限(每个三角形= 3个顶点)。因此,您可以将其设置为精确值或高估值。但您必须找到一些文档或查看source才能确定。

对于第二个问题,是BeginMesh()是构成三角形的三个位置。 verts[3]是三角形的Face Normal。它用于照明计算。最后一个成员vNorms是三角形的Texture Coordinates。这些用于纹理映射。如果不将纹理应用于网格,则可以将它们设置为零。