iOS 开发者的 Metal 养成计划「6」 —— 利用 MetalKit 解决图片纹理和三维模型兼容性的痛点
发布于:2018-03-07 12:11,阅读数:874,点赞数: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条