使用GLSL对顶点数组进行Billboarding?

时间:2010-08-28 15:10:07

标签: opengl glsl

我有一个三角形的矢量数组,它基本上由一堆需要广告牌的正方形组成。看起来像

的东西
GLfloat vertexpositions[60 * 3]; 
// [x,y,z] * 6 for each square, and there are 10 squares

然后,使用适当的参数调用glDrawArray以绘制总共10个方格。

是否可以编写一个着色器程序,该程序可以单独对所有这些存在于同一顶点阵列上的多边形进行广告处理?

3 个答案:

答案 0 :(得分:1)

您可以使用几何着色器进行每个基元处理。

答案 1 :(得分:1)

有两种方法。使用点精灵,或在连接转换后“撤消”旋转。对于广告牌,您需要翻译,但不能轮换。

如果将最终世界矩阵M作为制服传递给顶点着色器,则:

M[0][0] = M[1][1] = M[2][2] = 1.0
假设没有剪切,

将撤消旋转。 或者你可以简单地从M [0 - 3] [3]中提取它的翻译向量。

答案 2 :(得分:0)

至少,您需要存储每个广告牌的中心位置。然后,您可以使用几何着色器生成顶点。或者,您也可以存储相对于每个中心位置的顶点,并在顶点着色器中变换顶点。