0

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

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

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

4

1 回答 1

2

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

在 OpenGL 3.3 或更高版本中,您可以在片段着色器中使用一个内置的 gl_PrimitiveID 变量,它是一个针对绘制的每个点、线或三角形递增的计数器。(几何或镶嵌着色器会更复杂一些。)这也可能有用。

希望这可以帮助。

于 2014-06-23T01:05:15.233 回答