为什么在 CAD 编辑器中分段绘制简单的二维形状
Why are simple 2D shapes drawn in CAD editors in segments
在查看了一些二维建模程序后,我注意到所有图元都被绘制为线段(见附图)。
比如圆为什么画成多边形?在我看来,无论放大倍率(缩放比例)如何,创建一个绘制圆的着色器要容易得多?
同样有趣的是,这些段是单独绘制的还是作为一个绘制调用使用每个形状的特殊着色器绘制的?
开发者选择这条路的主要原因是什么?他们想要达到什么目的?
3D 图形 API 仅支持三角形、点和线段 - 没有用于绘制圆形或类似形状的内置渲染图元。因此,将所有类型的曲线绘制为折线的前两个原因是均匀性(您可以将任何类型的曲线渲染为一组线段)和性能(线段是 GPU 唯一支持的原生类型)。使用相同的通用 GLSL 程序绘制相同类型的基元允许一次渲染多条曲线并减少优化引擎中的绘制调用总数。
此外,您实际上不需要特殊的 GLSL 程序来避免粗糙的曲面细分 - 只需将您的曲线分割成更多的段,使其在屏幕上显得平滑。不过,您必须在性能和质量之间取得平衡 - 理想情况下,曲面细分级别应根据缩放级别动态变化,并且仅应用于屏幕上可见的图形。这不是一件容易实现的事情,但应用于 2D 绘图比应用于 3D 更直接。
GLSL 程序允许实现各种技巧,但渲染 固定宽度 曲线需要使用 Tessellation Shader(或至少使用 Geometry着色器),WebGL 不支持,或者应用一些肮脏的技巧!所以我不会说通过GLSL程序画一个质量可靠的细圆就那么简单。
不过,通过绘制一个矩形并丢弃由圆方程计算出的圆外的片段,仅使用片段着色器渲染实心圆等简单形状是可能的。但这只是一个圆圈,一个实心圆圈,还有很多其他图形和它们的组合!因此,再次 - 统一性和简单性。
的确,有应用程序为一组有限的常用图形实现特殊的 GLSL 程序,但这些需要大量开发。
在查看了一些二维建模程序后,我注意到所有图元都被绘制为线段(见附图)。 比如圆为什么画成多边形?在我看来,无论放大倍率(缩放比例)如何,创建一个绘制圆的着色器要容易得多?
同样有趣的是,这些段是单独绘制的还是作为一个绘制调用使用每个形状的特殊着色器绘制的?
开发者选择这条路的主要原因是什么?他们想要达到什么目的?
3D 图形 API 仅支持三角形、点和线段 - 没有用于绘制圆形或类似形状的内置渲染图元。因此,将所有类型的曲线绘制为折线的前两个原因是均匀性(您可以将任何类型的曲线渲染为一组线段)和性能(线段是 GPU 唯一支持的原生类型)。使用相同的通用 GLSL 程序绘制相同类型的基元允许一次渲染多条曲线并减少优化引擎中的绘制调用总数。
此外,您实际上不需要特殊的 GLSL 程序来避免粗糙的曲面细分 - 只需将您的曲线分割成更多的段,使其在屏幕上显得平滑。不过,您必须在性能和质量之间取得平衡 - 理想情况下,曲面细分级别应根据缩放级别动态变化,并且仅应用于屏幕上可见的图形。这不是一件容易实现的事情,但应用于 2D 绘图比应用于 3D 更直接。
GLSL 程序允许实现各种技巧,但渲染 固定宽度 曲线需要使用 Tessellation Shader(或至少使用 Geometry着色器),WebGL 不支持,或者应用一些肮脏的技巧!所以我不会说通过GLSL程序画一个质量可靠的细圆就那么简单。
不过,通过绘制一个矩形并丢弃由圆方程计算出的圆外的片段,仅使用片段着色器渲染实心圆等简单形状是可能的。但这只是一个圆圈,一个实心圆圈,还有很多其他图形和它们的组合!因此,再次 - 统一性和简单性。
的确,有应用程序为一组有限的常用图形实现特殊的 GLSL 程序,但这些需要大量开发。