使用GLSL根据颜色改变像素的大小

时间:2016-05-05 14:28:04

标签: opengl glsl

我有一个应用程序,它将使用32位编码轴承和强度数据。我的片段着色器已经对值进行了解码,然后根据方位和强度设置颜色。

我想知道是否也可以通过着色器更改绘制像素的大小(以及可能的形状)。

作为一个例子,假设我们有4个可能的强度值,那么0将导致绘制单个像素,1将绘制2x2正方形,2个4x4正方形和3个半径为6像素的圆。

过去,我们不得不在CPU方面做这一切,我希望将这项工作卸载到GPU上。

2 个答案:

答案 0 :(得分:0)

不,片段着色器不会影响"大小"他们写的数据。一旦某些内容被栅格化为fragments,它就不会真正具有"尺寸"了。

如果您要渲染GL_POINTS primitives,则可以从顶点着色器更改其大小。至于点大小,确保特定点覆盖确切数量的碎片是相当困难的。

答案 1 :(得分:0)

我想到的第一件事就是做一些类似于模糊技术的东西,但是我们使用它来查找具有范围的相邻纹素以检查它是否具有高于1.0f的强度,而不是模糊纹理。如果是,则将当前的纹理颜色设置为例如红色。

如果您使用与窗口大小相比为1:1的fbo,请在纹理坐标中使用1 / width和1 / height来获得大约1个像素(不完全是因为它不是像素而是texel,差不多了)

虽然这项工作很好,但其缺点是它非常昂贵,因为它具有n ^ 2的复杂性,可能还有一些分支。

编辑:经过一段时间的思考,这可能不适用于偶数

的大小