我正在开发一个真实世界的应用程序,用于在屏幕上渲染纯白色多边形,并随着时间的推移更改它们的 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 值。我该如何设置?
最佳答案
这个 GLTriangleBatch
类显然是 OpenGL super 圣经书提供的框架的一部分。它不是 OpenGL 标准的一部分(OpenGL 是一个普通的 C API)。
关于第一个问题,我假设 BeginMesh()
的 nMaxVerts
参数是您要绘制的顶点的上限(每个三角形 = 3 个顶点)。因此,您可以将其设置为精确值或高估值。但是您必须找到一些文档或查看 source确定地知道。
对于第二个问题,是的verts[3]
就是构成三角形的三个位置。
vNorms
是 Face Normal的三角形。它用于照明计算。最后一个成员 vTexCoords[3]
是 Texture Coordinates的三角形。这些用于纹理映射。如果您不向网格应用纹理,则可以将它们设置为零。
关于c++ - 我如何使用 GLTriangleBatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23274152/