我使用语言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);哪种方法工作得更快?有没有做得更好的选择?每个圆的大小和颜色都会在运行时发生变化。
发布于 2018-07-03 14:37:24
更快?
CPU速度更快?
完全更快?
没有人知道你的环境。图形芯片可以非常强大。当你可以合理地利用它的能力时,你的程序就有可能变得“更快”。
当你渲染三角形桶时,你的CPU正在做准备几何参数等工作,当你每次绘制调用只渲染两个三角形时,工作是在GPU端完成的。但是这种方法很难实现,因为你需要在片段着色器中传输原始的圆数据(我的意思是半径和中心坐标)。对于很少的圆圈来说,这是微不足道的,但对很多人来说并不是。考虑一下吧。
如果使用距离场纹理,则必须在CPU上或使用不同的绘制调用创建它。
发布于 2018-07-01 23:32:08
好吧,使用GPU(着色器)绘制应该比制作一大堆三角形要快得多(如果我自己确实正确的话)。
https://stackoverflow.com/questions/51124204
复制相似问题