【问题标题】:OpenGL VBO shaderOpenGL VBO 着色器
【发布时间】:2011-09-27 05:13:35
【问题描述】:

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

我可以使用着色器吗?

【问题讨论】:

    标签: opengl plot pyopengl


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多