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