我想设置我在 Metal 中绘制的线条的宽度。我可以使用 point_size 设置点的大小,如下所述:
但是,我不确定它如何与线条一起使用。
我想设置我在 Metal 中绘制的线条的宽度。我可以使用 point_size 设置点的大小,如下所述:
但是,我不确定它如何与线条一起使用。
简短的回答是没有办法像 Metal 中的点大小一样控制线宽。即使在 OpenGL 图形 API 中,执行此操作的函数(以前作为 gllinewidth 函数存在)现在也已弃用。
一种选择是将线绘制为带有两个三角形的四边形(一个框)。这可以让您控制线条的宽度。
如果您想坚持使用线图元本身,出于某种特殊原因,已经在 StackOverflow 上提出了等效的 OpenGL 问题,如此处所示。着色器可以简单地转换为金属着色 API。
如果您不喜欢使用线条而不是绘制带有两个矩形的 2D 框,您可以绘制多条彼此相邻的线条。您可以通过一次调用多次绘制相同的两个顶点来做到这一点drawPrimitives
,只需增加instanceCount
以模拟厚度,然后在您的顶点着色器函数中,您可以使用vertex_id
模数运算或其他类型的逻辑来转换位置线来模拟厚度。这可能比尝试在片段着色器中做一些花哨的事情要容易得多。
如果您正在绘制多条线,请将您instanceCount
的粗细乘以您想要的粗细,然后调整顶点着色器函数逻辑以将这些额外的线彼此相邻放置。
我对此进行了实验,发现这是一个非常麻烦的过程。因为您需要额外的数学来定位额外的线条以正确加厚。例如,如果您正在绘制一条水平线并且想要将粗细增加 2,您需要修改 y 值,但如果它是垂直的,您需要修改 x。以一个角度绘制变得更加复杂。如果您尝试绘制形状,您还会遇到尝试将长度与宽度匹配的问题。
我认为最好只画两个三角形来制作一个矩形来伪造一条线。数学将更容易理解。
在几何中,欧几里得的线没有任何宽度,它们只有长度,它们在绘制过程中得到的宽度只是为了表示。因此,虽然我认为线条可能有利于调试和开发,例如用于显示矢量或创建网格以查看比例,但如果您尝试设置样式以将它们呈现给用户,它们并不是您想要的。在这种情况下,它是适合这项工作的错误工具。