c++ - 我如何使用 GLTriangleBatch

标签 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 值。我该如何设置?

最佳答案

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

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

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

关于c++ - 我如何使用 GLTriangleBatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23274152/

相关文章:

c++ - 如何在 Ubuntu 14.04 上的交叉编译器 g++-arm-linux-gnueabifh 中安装 libbz2

algorithm - 如何检测一条线是否与另一个图形重合?

macos - Boot2docker 虚拟机图形

opengl - VNC 终端中的 vtkXOpenGLRenderWindow 错误

c++ - GLFW 3 初始化了,还没有?

ios - 获取 Objective-C 中两点之间的所有 X、Y 坐标

javascript - 实时切换网格的几何形状 three.js

c++ - 如何在 C++ 中对 ifstream 使用迭代器两次?

c++ - 从内存进程中获取信息

c++ - 为什么在前向声明后出现未定义类型错误?