【发布时间】:2011-09-27 05:13:35
【问题描述】:
我有一个 2D VBO 对象,它代表 2D 空间中的点。那时绘制任意形状的最佳方法是什么?可以说我想在每个地方画一个红色的“X”。
我可以使用着色器吗?
【问题讨论】:
我有一个 2D VBO 对象,它代表 2D 空间中的点。那时绘制任意形状的最佳方法是什么?可以说我想在每个地方画一个红色的“X”。
我可以使用着色器吗?
【问题讨论】:
你不一定需要一个特殊的着色器,你可以只使用点精灵。这基本上意味着将 VBO 绘制为一个点集(使用glDrawArrays(GL_POINTS, ...))并启用点精灵在每个点的位置绘制一个纹理正方形(具有“X”纹理),假设点大小更大超过 1 个像素。
要在每个点的位置实际生成几何图形,您可以使用几何着色器。这样,您还可以将 VBO 渲染为点集,并为几何着色器内的每个点生成两条线(“X”)或任何几何图形。
几何着色器的替代方案是实例化数组(需要与几何着色器相同的 GL3/DX10 硬件)。这样,您可以绘制“X”形状的多个实例,并使用每个实例的索引高级一次的属性从点 VBO 获取实例的各个位置。
最后一种选择是在 CPU 上手动生成形状的几何图形,这样您就可以得到一个包含所有“X”作为线条或精灵或其他任何东西的线集或四边形集。
但最简单(也许是最快的,不确定)的方法应该是首先提到的点精灵方法,因为他们通常的剪辑问题在你的情况下不应该是那么大的问题,而且你似乎没有无论如何都需要3d形状。这样,您既不需要在 CPU 上自己生成几何图形,也不需要特殊的着色器或 GL3/DX10 硬件(尽管现在这很常见)。您所需要的只是形状的纹理和启用点精灵(自 GL 1.5 起应该是核心)。
如果所有这些一般性想法都不能告诉您任何事情,那么您可能需要更深入地研究 OpenGL 和一般的实时计算机图形学。
【讨论】: