我有一个三角形的向量数组,它基本上由一堆需要广告牌的正方形组成。看起来像的东西
GLfloat vertexpositions[60 * 3];
// [x,y,z] * 6 for each square, and there are 10 squares
之后,glDrawArray
使用适当的参数调用以绘制总共 10 个正方形。
是否可以编写一个着色器程序,可以将存在于同一个顶点数组上的所有这些多边形分别放在广告牌上?
有两种方法。使用点精灵,或在连接转换后“撤消”旋转。对于广告牌,您需要平移,但不需要旋转。
如果将最终世界矩阵 M 作为统一传递给顶点着色器,则:
M[0][0] = M[1][1] = M[2][2] = 1.0
假设没有进行剪切,将撤消旋转。或者您可以简单地从 M[0 - 3][3] 中提取其平移向量。
您可以使用几何着色器对每个基元进行处理。
至少,您需要存储每个广告牌的中心位置。然后您可以使用几何着色器生成顶点。或者,您还可以存储相对于每个中心位置的顶点并在顶点着色器中变换顶点。