从三角形创建圆或使用片段着色器绘制圆是否更快?

时间:2018-07-01 14:30:54

标签: opengl rust glsl fragment-shader glium

我使用语言Rust和Glium库。我想在屏幕上显示大量的圆圈,但是我无法决定如何做。

有一个从三角形创建圆的选项,或者我可以用片段着色器绘制圆,即,取每个圆的中心到屏幕上每个点的距离,如果小于半径,然后将其绘制为所需的颜色。为了清楚起见,下面是一个如何绘制一个圆的示例:

vec2 point = vec2(200.0f, 200.0f);
float dist = distance(point, gl_FragCoord.xy);

if (dist < 200)
    gl_FragColor = vec4(0.0f, 1.0f, 0.0f, 1.0f);

哪种方法会更快?有更好的选择吗?每个圆圈的大小和颜色都会在运行时发生变化。

2 个答案:

答案 0 :(得分:0)

更快?

对CPU更快?

完全更快?

没人知道您的环境。图形芯片可以非常强大。 而且当您可以合理地利用其功能时,您的程序可能会“更快”

渲染三角形桶时,CPU正在准备几何参数等,当每个绘制调用仅渲染两个三角形时,则在GPU端完成了工作。 但是这种方法可能难以实现,因为您需要在片段着色器中传输原始圆数据(我是指半径和中心坐标)。对于少量的圆圈来说,这是微不足道的,但对于许多人而言却并非如此。考虑一下。

如果使用距离场纹理进行处理,则必须在CPU上或通过其他绘制调用来创建它。

答案 1 :(得分:-2)

使用GPU(shader)进行绘制的速度应该比制作整个三角形快得多(如果我确实对自己进行校正的话。)