我有一个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和一般的实时计算机图形。
关于opengl - OpenGL VBO着色器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7560557/