iOS金属线宽

art*_*hur 6 ios metal

我想设置我在Metal中绘制的线条的宽度.我可以使用point_size设置点的大小,如下所述:

https://developer.apple.com/library/prerelease/ios/documentation/Metal/Reference/MTLRenderCommandEncoder_Ref/index.html

但是,我不确定它如何与线条配合使用.

Bjo*_*orn 6

如果您执意使用线条而不是用两个矩形绘制 2D 框,则可以绘制多条彼此相邻的线条。您可以通过一次调用多次绘制相同的两个顶点来实现这一点drawPrimitives,只需增加 来instanceCount模拟厚度,然后在顶点着色器函数中,您可以使用vertex_id模数运算或某种其他类型的逻辑来转换顶点的位置线来模拟厚度。这可能比尝试在片段着色器中做一些奇特的事情要容易得多。

如果您要绘制多条线,请将您的线instanceCount乘以所需的粗细,然后调整顶点着色器函数逻辑,将这些附加线彼此相邻放置。

我对此进行了实验,发现这是一个相当麻烦的过程。因为您需要额外的数学来定位额外的线条以正确加粗。例如,如果您正在绘制一条水平线并希望将厚度增加两倍,您需要修改 y 值,但如果它是垂直的,您需要修改 x 值。以一定角度绘图会变得更加复杂。如果您尝试绘制形状,您还会遇到尝试匹配长度和宽度的问题。

我认为最好只画两个三角形来制作一个矩形来假造一条线。数学将变得更容易、更容易理解。

在几何中,欧几里得的线没有任何宽度,它们只有长度,它们在绘图时获得的宽度只是为了表示。因此,虽然我认为线条可能有利于调试和开发,例如用于显示矢量或创建网格来查看比例,但如果您尝试设计它们的样式以将它们呈现给用户,则它们不是您想要的。在这种情况下,它是不适合这项工作的工具。


cod*_*ion 5

简短的回答是没有办法以与Metal中的点大小相同的方式控制线宽.即使在OpenGL图形API中,现在也不推荐使用此函数(以前作为gllinewidth函数存在).

一个选项是将线条绘制为四边形(一个方框),带有两个三角形.这样可以控制线条的宽度.

如果你想坚持到线原始本身,对于一些特殊的原因,相当于OpenGL的问题已经被问在计算器上已经是看到这里.着色器可以简单地转换为Metal shading API.