我需要一个高效的openGL管道来实现线段形状的特定外观。
这是我的目标:
(https://www.shadertoy.com/view/XdX3WN)
这是我在程序中已经拥有的原型之一(螺旋形):
对于这张图片,我在gl_FragColor里面输出从片段到相机的距离。用于此的流水线是通常的VBO-> VAO-> Vertex着色器 - >片段着色器路径。
shadertoy着色器计算屏幕每个片段中3个点的距离,并根据该值输出颜色。但在我的例子中,我需要反过来。为永远的螺旋碎片计算周围碎片的颜色(在这种情况下)。是否有必要使用FBO将场景渲染到纹理中,或者是否有快捷方式?
答案 0 :(得分:1)
适用于数量有限的行
使用覆盖区域或屏幕的单个四边形作为几何体,并将线点坐标和颜色作为 1D 纹理或uniform
发送到着色器。然后你可以在每个像素的片段着色器内一次完成所有行的计算。较高的行数会大大减慢速度。
行数越多
您需要将几何图形从线条转换为覆盖受影响的线条周围的矩形:
使用透明度正确合并线条,并从线条的垂直距离计算颜色。添加距端点距离的点(可以使用纹理而不是着色器完成)。
您的图片显示光线会影响整个屏幕,因此在这种情况下,您需要调用每行覆盖整个屏幕的Quad而不是矩形覆盖
答案 1 :(得分:1)