如何使用 OpenGL ES 对三角形像素求和
How to sum triangle pixels with OpenGL ES
我是 OpenGL ES 的新手。我目前正在阅读有关 2.0 版 OpenGL ES 的文档。我有一个三角形 2D 网格,一个 2D RGB 纹理,我需要为每个三角形计算以下数量:
其中 N
是给定三角形的像素数。进一步 CPU 处理需要这些数量。这个想法是使用 GPU 光栅化对三角形上的数量求和。我看不出如何使用 OpenGL ES 2.0(这是 android 设备中最流行的版本)执行此操作。我的另一个问题是:是否可以使用 OpenGL ES 3.0 进行此类计算?
I am not able to see how to do this with OpenGL ES 2.0
你不能; API 根本就不是为了这样做而设计的。
Is it possible to do this type of computation with OpenGL ES 3.0?
一般情况下,不会。如果您可以使用 OpenGL ES 3.1 并且可以控制输入几何图形,那么可行的算法将是:
- 添加一个顶点属性,它是网格中每个三角形的图元 ID(我们可以用作数组索引)。
- 分配一个原子缓冲区
GL_ATOMIC_COUNTER_BUFFER
,每个原语一个原子,已预置零。
- 在片段着色器中增加对应于当前图元的原子(从顶点属性加载)。
虽然性能可能非常糟糕 - 对于大多数 GPU 实现来说,原子通常很糟糕。
我是 OpenGL ES 的新手。我目前正在阅读有关 2.0 版 OpenGL ES 的文档。我有一个三角形 2D 网格,一个 2D RGB 纹理,我需要为每个三角形计算以下数量:
其中 N
是给定三角形的像素数。进一步 CPU 处理需要这些数量。这个想法是使用 GPU 光栅化对三角形上的数量求和。我看不出如何使用 OpenGL ES 2.0(这是 android 设备中最流行的版本)执行此操作。我的另一个问题是:是否可以使用 OpenGL ES 3.0 进行此类计算?
I am not able to see how to do this with OpenGL ES 2.0
你不能; API 根本就不是为了这样做而设计的。
Is it possible to do this type of computation with OpenGL ES 3.0?
一般情况下,不会。如果您可以使用 OpenGL ES 3.1 并且可以控制输入几何图形,那么可行的算法将是:
- 添加一个顶点属性,它是网格中每个三角形的图元 ID(我们可以用作数组索引)。
- 分配一个原子缓冲区
GL_ATOMIC_COUNTER_BUFFER
,每个原语一个原子,已预置零。 - 在片段着色器中增加对应于当前图元的原子(从顶点属性加载)。
虽然性能可能非常糟糕 - 对于大多数 GPU 实现来说,原子通常很糟糕。