使用Metal绘制简单的形状 ShapeMeal

ShapeMetal是一个简化Metal绘制简单图形的库,采用POP风格,避免了繁琐的坐标转换和顶点生成。它提供了一个协议,允许只需传入屏幕坐标和几何参数即可完成绘制,降低了在Metal中绘制图形的复杂度。
摘要由CSDN通过智能技术生成

使用Metal绘制简单的形状

简介

ShapeMetal提供一些简单接口使用Metal去绘制一些简单的图形。例如,如果想绘制一个矩形传入当前坐标系下面的一个Rect区域即可,绘制圆传Center和Radius即可。该工程使用了POP的编程风格,舍弃了OOP的方式,不是因为OOP不好,我只是单纯的认为OOP不适合组件式开发。如果有同学对POP感兴趣,可以看一下国外大神对swift使用POP的理解。

创作原因

Metal作为苹果推出的图像渲染和深度学习的框架,相比于OpenGL更加贴合苹果的硬件设备,性能有很大的提高。但是太过底层,如果当我们需要在MTKView上面单纯的绘制一些简单的图形的时候,过程特别繁琐。下面是我碰到的问题:

  1. Metal的坐标系是归一化的坐标系,范围是从[-1, 1]。所以我们屏幕上使用的坐标系系统不能直接在Metal中使用,每次都需要转换顶点,就是好麻烦。
  2. 如果我们使用Core Graphics框架来绘制一些简单的图形,例如,绘制一个矩形,我们只需要传入一个NSRect,就可以绘制出来我们想要的形状。但是如果是metal的话就需要生成5个顶点信息来绘制出一个矩形。(这里为什么是5个顶点,后面会介绍到。)

如果我们想要绘制一些简单的图形就要通过两个复杂的步骤,1.屏幕坐标系转换到Metal坐标系 -> 2. 生成对应的顶点信息。所以我就在想有没有办法来把这些不必要的过程封装一下,只需要传入屏幕上一些简单的坐标就能使用metal渲染出自己想要的图形。所以ShapeMetal工程就产生了。

ShapeMetal

Code Structure

  1. 因为是绘制的操作所以首先我们需要封装一些绘制操作,我创建了一个绘制简单图形的protocol
//定义一些简单的绘制图形的接口
protocol ShapeMetalDrawable {
   
	func line(_ start: NSPoint, _ end: NSPoint)
	func rectangle(_ rect: NSRect)
	func circle(_ center: NSPoint, _ radius: CGFloat)
}

如果是使用Core Graphics来绘制我们可以这么实现这个协议(或者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值