3

我有一个 2D VBO 对象,它代表 2D 空间中的点。那时绘制任意形状的最佳方法是什么?可以说我想在每个地方画一个红色的“X”。

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

4

1 回答 1

1

你不一定需要一个特殊的着色器,你可以只使用点精灵。这基本上意味着将 VBO 绘制为一个点集(使用glDrawArrays(GL_POINTS, ...))并启用点精灵在每个点的位置绘制一个带纹理的正方形(具有“X”纹理),假设点大小超过 1 个像素.

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

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

最后一种选择是在 CPU 上手动生成形状的几何图形,这样您最终会得到一个包含所有“X”作为线条或精灵或其他东西的线集或四边形集。

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

如果所有这些一般性想法都没有告诉您任何信息,那么您可能需要更深入地研究 OpenGL 和一般的实时计算机图形学。

于 2011-09-26T21:03:46.857 回答