1

我使用 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);

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

4

2 回答 2

2

快点?

CPU更快?

完全更快?

没有人知道你的环境。图形芯片可以非常强大。当你可以合理地利用它的力量时,你的程序可能会“更快”

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

如果您使用距离场纹理进行此操作,则必须在 CPU 上或使用不同的绘图调用创建它。

于 2018-07-03T06:37:23.607 回答
-2

使用 GPU(着色器)进行绘图应该比制作一大堆三角形要快得多(如果我自己确实是正确的..)

于 2018-07-01T15:32:07.717 回答