在我们的应用程序中,我们使用金属绘制心率图,并且效果很好,但是现在我想使用金属绘制简单的文本。
因为当他们实施金属计算时我不是团队的一员。我有几个问题:
1-在金属视图编码器中,我应该使用line drawPrimitives type
吗?我的意思是drawPrimitives
用于绘制对象,对不对?所以我也必须用它来绘制文本?
2-我们使用一个自定义类创建一个圆顶点,现在我的问题是,是否应该使用类似此类的东西在文本中绘制单词?
let circleVertice = CircleVertex(x: coordinate, y: bottomY, radius: 20)
这里是班级
import Foundation
import simd
public class CircleVertex {
public let x: Float
public let y: Float
public let radius: Float
public init(x: Float = 0, y: Float = 0, radius: Float = 10) {
self.x = x
self.y = y
self.radius = radius
}
public func toVertices(perimeterPoints: Int = 32) -> [vector_float2] {
assert(perimeterPoints >= 4)
assert(perimeterPoints % 2 == 0)
let angle = 360 / Float(perimeterPoints)
let angleInRadians = (Float.pi * angle) / 180
var vertices: [vector_float2] = []
vertices.reserveCapacity(perimeterPoints * 2)
let origin = simd_float2(x, y)
var first = vector_float2()
for i in 0 ..< perimeterPoints {
let radians = angleInRadians * Float(i)
let x = cos(radians) * radius
let y = sin(radians) * radius
let point = vector_float2(x + origin.x, y + origin.y)
if i == 0 {
first = point
}
vertices.append(point)
if (i + 1) % 2 == 0 {
vertices.append(origin)
}
}
vertices.append(first)
return vertices
}
private func rads(forDegree d: Float) -> Float {
return (Float.pi * d) / 180
}
}
3-最后一个问题是,快速绘制和呈现简单文本(此文本是整数,例如:1250)的最简单方法是什么。
非常感谢
1]可以使用任何这些数据类型。这取决于您的实现,最常用的类型是MLPrimitiveTypeTriangle
或MTLPrimitiveTypeTriangleStrip
。
[2)可以使用任何要创建顶点的类,重要的是要确保其符合Metal规则。
3)在Metal上绘制文本的最快方法是使用SpriteKit framework。 SpriteKit包含一个名为SKRenderer
的类,该类允许应用程序通过将SKScene渲染到Metal命令缓冲区中来混合SpriteKit和Metal内容。