OpenGL VBO 着色器

标签 opengl plot pyopengl

我有一个 2D VBO 对象,它表示 2D 空间中的点。此时绘制任意形状的最佳方法是什么?假设我想在每个位置画一个红色的“X”。

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

最佳答案

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

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

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

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

但是最简单的(也许是最快的,不确定)方法应该是首先提到的点 Sprite 方法,因为它们通常的裁剪问题在你的情况下不应该是一个大问题,而且你似乎也没有无论如何都需要 3D 形状。这样,您既不需要自己在 CPU 上生成几何体,也不需要特殊的着色器或 GL3/DX10 硬件(尽管这在当今很常见)。您所需要的只是形状的纹理并启用点 Sprite (自 GL 1.5 起这应该是核心)。

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

关于OpenGL VBO 着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7560557/

相关文章:

c++ - VS 2012 Build/Shader问题

c++ - Opengl 在 2d 或 3d 中显示顶点

r - 将图像设置为多边形的颜色

python - 如何正确使用 gluLookAt?

c++ - 有人试过使用 glMultiDrawArraysIndirect 吗?编译器找不到函数

python - 属性错误 : 'BooleanFalse' object has no attribute 'evalf' (piecewise plotting using sympy)

python - 彩色 Pandas 时间序列按列绘制

python - OpenGL 中的太阳系,相机位置

python - 来自 PyOpengl 缓冲区的 PIL Image.fromstring 大小错误

opengl - glTexImage2d 中的边框参数