用金属绘制简单文本

问题描述 投票:0回答:1

在我们的应用程序中,我们使用金属绘制心率图,并且效果很好,但是现在我想使用金属绘制简单的文本。

因为当他们实施金属计算时我不是团队的一员。我有几个问题:

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)的最简单方法是什么。

非常感谢

swift metal metalkit
1个回答
0
投票

1]可以使用任何这些数据类型。这取决于您的实现,最常用的类型是MLPrimitiveTypeTriangleMTLPrimitiveTypeTriangleStrip

[2)可以使用任何要创建顶点的类,重要的是要确保其符合Metal规则。

3)在Metal上绘制文本的最快方法是使用SpriteKit framework。 SpriteKit包含一个名为SKRenderer的类,该类允许应用程序通过将SKScene渲染到Metal命令缓冲区中来混合SpriteKit和Metal内容。

© www.soinside.com 2019 - 2024. All rights reserved.