Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL VBO着色器_Opengl_Plot_Pyopengl - Fatal编程技术网

OpenGL VBO着色器

OpenGL VBO着色器,opengl,plot,pyopengl,Opengl,Plot,Pyopengl,我有一个二维VBO对象,它表示二维空间中的点。在该点绘制任意形状的最佳方法是什么?假设我想在每一个点上画一个红色的“X” 我可以使用着色器来执行此操作吗?您不一定需要特殊的着色器,您可以使用点精灵。这基本上意味着将VBO绘制为一个点集(使用glDrawArrays(GL_POINTS,…)),并允许点精灵在每个点的位置绘制一个带纹理的正方形(纹理为“X”),假设点大小超过1个像素 对于在每个点的位置实际生成几何体,可以使用几何体着色器。通过这种方式,还可以将VBO渲染为点集,并为几何体着色器内的

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


我可以使用着色器来执行此操作吗?

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

对于在每个点的位置实际生成几何体,可以使用几何体着色器。通过这种方式,还可以将VBO渲染为点集,并为几何体着色器内的每个点生成两条线(“X”)或任何几何体

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

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

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

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