在每个顶点渲染不同的OpenGL点精灵

时间:2014-06-22 23:50:21

标签: opengl point-sprites

基本问题:使用OpenGL,可以使用着色器程序使用单个glDrawArrays调用(使用GL_POINTS)在每个顶点绘制不同的点精灵吗?

更多信息: 我有一个OpenGL桌面程序(在WPF应用程序中使用SharpGL),可以显示数千个2D轨道。部分地,轨道是一系列时间戳点,并且根据可变的CurrentTime周围的时间跨度显示一部分点。每个点的其他属性决定了点的颜色。每个轨道绑定它的顶点数组,颜色数组和时间戳数组,并调用glDrawArrays来渲染其点。其余的是着色器程序。

我最近开始使用点精灵来为不同类型的曲目提供不同的符号。我想根据每个点的其他属性在轨道上给出不同的符号。我想用每个轨道的一个glDrawArrays调用来做这个。所以想到的是一个精灵数组可以解决这个问题(对每个顶点应用不同的精灵)。这可能吗?我错过了一个更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

不确定。 OpenGL会在每个精灵上自动生成从0.0到1.0的纹理坐标,但是你的片段着色器无法改变它们。我将所有精灵图像放入一个大的纹理图集中,并将确定要使用哪个图像的属性传递给片段着色器。

在OpenGL 3.3或更高版本中,您可以在片段着色器中使用内置的gl_PrimitiveID变量,这是为每个绘制的点,线或三角形递增的计数器。 (几何或曲面细分着色器有点复杂。)这也可能有用。

希望这有帮助。