iOS 开发者的 Metal 养成计划「6」 —— 利用 MetalKit 解决图片纹理和三维模型兼容性的痛点

发布于:2018-03-07 12:11,阅读数:797,点赞数:0


> 本文为小专栏[《Graphics Dance》](https://xiaozhuanlan.com/graphics_dance)特供文章,仅提供预览,欢迎订阅。

# 目录

- 引言
- MetalKit
- MTKView
- MTKTextureLoader
- 图片文件
- 像素格式
- 字节对其
- 常规纹理加载
- 其他
- MTKModel
- 三维模型
- ModelIO
- 小结


# 引言

说完了 Metal 的各种细节,该说说如何更有效地开发 Metal 应用了。在开发 OpenGL 应用时,苹果提供了`GLKit`来帮助开发者。同样的,苹果为开发者提供了`MetalKit`来帮助开发者更快地开发应用。

附:文章小结中会提供一个持续更新的非常适合初学者的关于 Metal 的教程网站,欢迎订阅后查看。

# MetalKit

> Build Metal apps quicker and easier, using far less code. Render graphics in a standard Metal view, load textures from many sources, and work efficiently with models provided by Model I/O.

MetalKit 主要干了两件事:

- 能让开发者使用更少的代码,更快速地开发 Metal App。
- 提供了绘制 Metal 图形的标准 View、加载纹理以及加载模型的标准工具库。

以上是在开发 Metal App 过程中几乎都会使用到的。

## MTKView

和`GLKit`中提供的`GLKView`类似的,苹果提供了`MTKView`封装来方便开发者使用。

使用`MTKView`的方法很简单,大概步骤如下:

- 构造`MTKView`对象并且作为子 View 添加到容器中。
- 设置`delegate`属性,用于回调。`func draw(in view: MTKView)`方法会在需要重绘时被自动调用。
- 设置`device`属性,可使用`MTLCreateSystemDefaultDevice()`方法获得默认`device`。
- 在`func draw(in view: MTKView)`方法中添加绘制命令。

在之前的文章中提到过,在编码渲染命令阶段会需要一个`MTLRenderPassDescriptor`对象,如果使用`MTKView`,那么这个对象可以直接通过`currentRenderPassDescriptor`属性取到。

使用`MTKView`,开发者需要关心的就仅仅是在`draw`方法里添加绘制代码即可。

## MTKTextureLoader

正如`MTKTextureLoader`的字面意思,用于加载纹理。

#### 图片文件

对于不了解图形的初学者来说,加载图片到图形引擎中并不是那么容易理解。开发者们平时接触最多的图片大概是`jpg`、`png`等一系列格式的图片。这些文件都是经过特定编码器编码的,它们文件本身的数据并不是图形引擎可读的数据。如果需要使用它们,需要经过`libjpeg`、`libpng`等库对图片进行解码,获得解码后的图形数据。

#### 像素格式

由于图片本身包含的通道数、颜色格式各不相同,解码后的数据也并不一定是大家最熟悉的`RGBA`数据。有的图像也许是不包含透明通道的`RGB`格式,有的图像是苹果系统默认的`BGR`格式,还有`YCbCr`、`CMYK`、灰度等各种像素格式。


---

# 预览结束,查看全文请订阅小专栏[《Graphics Dance》](https://xiaozhuanlan.com/topic/0875169243)


评论:0条


返回列表

返回归档

返回主页