2011-09-26 189 views
3

我有一个2D VBO对象,表示2D空间中的点。在这一点上绘制任意形状的最佳方式是什么?可以说我想每个都画一个红色的'X'。OpenGL VBO着色器

我可以使用着色器来做到这一点吗?

回答

1

你并不需要特殊的着色器,你可能只是使用点精灵。这基本上意味着将VBO绘制为一个点集(使用glDrawArrays(GL_POINTS, ...))并且使得点精灵能够在每个点的位置处绘制纹理正方形(具有'X'的纹理),假设点大小大于1像素。

对于实际在每个点的位置生成几何图形,可以使用几何着色器。这样,您还可以将VBO渲染为点集,并为几何着色器内的每个点生成两行('X')或任何几何图形。

几何着色器的替代方案是实例化阵列(需要几何着色器需要相同的GL3/DX10硬件)。通过这种方式,您可以绘制多个“X”形状实例,并通过使用索引每个实例进行一次的属性,从VBO的角度获取实例的各个位置。

最后一种方法是在CPU上手动生成形状的几何图形,以便最终生成一个线集或四个集合,其中包含所有'X'作为线或精灵或任何其他元素。

但是,最简单的(也许最快的,不确定的)方式应该是首先提到的点精灵方法,因为他们通常的裁剪问题不应该在你的情况下是一个很大的问题,你似乎没有反正需要3D形状。这样你既不需要在CPU上自己生成几何图形,也不需要特殊的着色器或GL3/DX10硬件(尽管现在这种情况很常见)。所有你需要的是一个纹理的形状和启用点精灵(这应该是自GL 1.5以来的核心)。

如果所有这些一般的想法都没有告诉你什么,你可能想深入研究一下OpenGL和实时计算机图形。