Metal 系列教程

2023-11-14

这系列文章,目前发布在我的小专栏 iOS 图像处理 上。欢迎订阅~

从 2014 年,Apple 正式推出 Metal 到现在,这个 Metal 系列教程,酝酿了很久,却迟迟没有进展。

直到 WWDC 2018,Apple 宣布 iOS 12 将弃用 OpenGL / CL,我想,这或许是个机会。

Apps built using OpenGL ES will continue to run in iOS 12, but Open GL ES is deprecated in iOS 12. Games and graphics-intensive apps that previously used OpenGL ES should now adopt Metal.

 

这个系列会回顾整理之前学习的内容,有序输出。算是对自己的一个交代,同时也希望,能帮助到那些想要学习 Metal 却不知道怎么下手的朋友。

 

这系列文章,目前发布在我的小专栏 iOS 图像处理 上。欢迎订阅~

 

那么,什么是 Metal

Render advanced 3D graphics and perform data-parallel computations using the GPU.

总结来说,Metal 能让你尽可能的发挥 GPU 强大的渲染、运算的能力。

这里,我不做过多的阐述,如果你对图像处理,游戏编程感兴趣,又或者你只是认可这项技术,相信它是未来,值得投资学习。那么,我想这个系列不会让你失望。

 

这个系列的文章,是教程、实践,而不是文档

我会尽可能,在实现功能的过程中,穿插介绍各个知识点。而不是一股脑的全部输出。

不然可能看了四五篇,发现自己还是什么都做不了,还是不懂之前学到的具体是什么。

然后,就不了了之了。

Metal 系列的实战教程,会循序渐进,穿插详细介绍各个用到的 Metal 对象。

由于 Metal(iOS 8 + A7),MetalKit(iOS 9 + A7)的软/硬件限制,以及不同读者的需求,之后的配套 Demo,会同时包含 iOS+Swift 和 macOS+ObjC 两种,文章以 iOS+Swift 进行演示。并且尽可能不用 MetalKit,功能都自己实现(避免一些实现细节被屏蔽了,以及降低系统版本限制)。当然,也会有专门的文章,介绍 MetalKit 相关。

另外,每节 Demo 都有 start / end 两份代码,建议阅读完后,自己根据 start 基础工程,完成本节新的内容。该系列 Demo 主要是为了学习 Metal,所以一些语法特性,代码/文件结构,容错,封装等,不会去细究。

每篇文章争取控制在 15 分钟的阅读量,细分知识点,便于随时阅读,学习。

 

另外,之后的实战,会侧重于图像处理,比如滤镜,画笔,马赛克,增高,相机,AR 贴图等。开发过程中,也会结合系统的其他框架,比如 Core Image、ARKit、Core ML、Vision 等,做一些好玩的事情。

PS:订阅后的朋友,可以加我微信:wxidlongze,拉你进群。交流,扯淡,学习资源分享~ 最后,源码在小专栏中有链接~


目录

基础概念:

一。Metal 概述

Metal 是什么,Metal 能做什么,为什么要用 Metal。

 

二。Metal 框架一览

Metal 进行图像处理的整体框架。宏观介绍渲染管线。

 

基础实践:

三。清屏

最最最最简单的一个基础工程。介绍整体的显示渲染流程。

 

四。绘制一个三角形

堪称图形界的 Hello World。会较为完整的过一遍渲染管线。麻雀虽小,五脏俱全。

 

五。MSL 介绍

介绍如何编写 Metal 着色器。以及它们是如何被加载工作的。

 

六。显示图片

还在纠结绘制三角形有什么用吗?

这节会教你如何加载纹理,如何显示相册导入的图片。

 

七。视图封装

封装一个通用的控件。支持不同 contentMode,支持缩放,最大显示像素格,长按对比。

 

案例实战:

八。色温滤镜

基础的颜色滤镜,以及如何使用 CLUT(Color Lookup Table)实现效果。

 

九。多重滤镜

滤镜链的实现,多个滤镜组合。

 

十。增高

不再是逐像素的简单处理,涉及形变。

...To be continued ~


这系列文章,目前发布在我的小专栏 iOS 图像处理 上。欢迎订阅~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Metal 系列教程 的相关文章

随机推荐

  • 元组的详细操作

    一 创建元组 name chinese gansu beijing 创建空元组 name 元组中只包含一个元素时 需要在元素后面添加逗号消除歧义 name chinese 二 访问元组 元组可以使用下标索引来访问元组中的值 name chi
  • RK356x Android11更换默认的Launcher

    1 开发环境 ubuntu版本 18 04 开发平台 RK356x Android版本 android11 2 目的 android11 系统自带了一个启动器Launcher3 在android源码路径下的packages apps Lau
  • 机器学习之深度神经网络

    目录 卷积神经网络与全连接神经网络 前向后向传播推导 通用手写体识别模型 人脸识别模型 电影评论情感分析模型 卷积神经网络与全连接神经网络 卷积神经网络 Convolutional Neural Network CNN 和全连接神经网络 F
  • 数据结构——普里姆(Prim)算法

    普里姆算法 Prim算法 图论中的一种算法 可在加权连通图里搜索最小生成树 意即由此算法搜索到的边子集所构成的树中 不但包括了连通图里的所有顶点 且其所有边的权值之和亦为最小 以下是数据结构中关于普里姆算法的操作 编程风格参考严蔚敏版数据结
  • 实施运维企业面试题-5

    NETWORK 1 请描述 TCP IP 协议中主机与主机之间通信的三要素 参考答案 IP 地址 IP address 子网掩码 subnet mask IP 路由 IP router 2 请描述 IP 地址的分类及每一类的范围 参考答案
  • Graphormer复现碎碎念

    一 简介 Graphormer https github com microsoft Graphormerhttps github com microsoft Graphormer 二 安装 使用 install sh安装 前面是pip直接
  • localStorage的过期时间设置的方法?——和派孔明

    我们都知道localStorage不主动删除 永远不会销毁 那么如何设置localStorage的过期时间呢 今天我们来一起尝试一下
  • C++与STL基础二:栈stack与前中后缀表达式的应用

    C 与STL基础二 栈stack与前中后缀表达式的应用 栈 stack 是一种具有特定操作规则的数据结构 它遵循后进先出 LIFO 的原则 在C 中 我们可以使用STL 标准模板库 中的stack类来实现栈的功能 本文将介绍栈及其常见应用之
  • Python之numpy教程(二):运算、索引、切片

    1 numpy数组的特点在于 大小相等的数组之间 任何算数运算都会将运算应用到元素级 请看下面的例子 arr np array 1 2 3 4 5 6 arr输出 array 1 2 3 4 5 6 arr arr输出 array 1 4
  • opencv实现阈值分割

    文章目录 基础函数 直方图阈值 实现 threshold 函数使用 三角法阈值 实现 迭代法阈值 算法步骤 Python语法补充 实现 大津法 理论 cv实现 底层复现 自适应阈值 理论 具体操作步骤 优化 CV实现 底层复现 基础函数 在
  • 基于SSM+Vue的汽车售票网站的设计与实现

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SSM 前端 采用Vue技术开发 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Eclipse 是否Mave
  • [前端系列第6弹]Ajax简明教程:轻松实现Web页面的异步交互

    在这篇文章中 我将介绍Ajax的基本概念 原理 优缺点 实现方法和应用场景 以及如何使用它来实现Web页面的异步交互 还将给一些简单而实用的例子 让你可以跟着我一步一步地编写自己的Ajax代码 目录 一 什么是Ajax 二 如何使用Ajax
  • gdb调试多进程程序和多线程程序

    gdb调试多进程程序和多线程程序 平时一般用gdb直接调试短小的程序 好像我还没调试过多进程和多线程程序呢 1 gdb调试多进程程序 如果一个进程通过fork系统调用创建了子进程 gdb会继续调试原来的进程 子进程则正常运行 常用的有两种方
  • win10设置任务栏双屏不同位置(方向)

    在所有显示器上显示任务栏开 任务栏在屏幕的位置 底部 在所有显示器上显示任务栏 任务栏在屏幕的位置靠右 在所有显示开 win10双屏设置任务栏位置方向 哔哩哔哩 bilibili
  • 重定义;多次初始化(C++报错)

    C 中报错 b 重定义 多次初始化 如图 将a b c前面的int数据类型去掉即可
  • SpringMvc,全面讲解@RequestParam注解的用法和原理

    本文要讲的 RequestParam注解大家在开发中应该会经常的用到 但是它的某些用法我感觉你不一定都知道 所以这篇文章就讲解一下带大家拨开云雾全面了解这个注解 使大家在开发中使用到这个注解的时候不再一知半解 先看一下 RequestPar
  • 生活服务是未来十年最大的商业机会?

    编者按 本文来自有邻的投稿 内容来自有邻创始人杨仁斌周末在杭州一个 O2O 活动上的分享 文章主要是杨仁斌对于 O2O 和生活服务的一些观点分享 最后一个部分中介绍了他们自己家的 有邻 提及的数据等资料 36 氪不作背书 我的第一个观点是
  • OpenWrt系统配置UCI

    UCI简介 UCI Unified Configuration Interface 是 Openwrt 中的统一配置接口 官方文档参考 每一个程序的配置文件都保存在 etc config 目录 可以通过文本编辑器 uci 一个可执行程序 以
  • 2022年社区工作人员社区专职工作者考试精选套卷及答案

    题库来源 优题宝公众号 2022年社区工作人员社区专职工作者考试精选套卷及答案 根据最新社区工作人员社区专职工作者考试大纲与历年社区工作人员社区专职工作者考试真题汇总编写 包含社区工作人员社区专职工作者考试常考重点题型与知识点 有助于考生复
  • Metal 系列教程

    这系列文章 目前发布在我的小专栏 iOS 图像处理 上 欢迎订阅 从 2014 年 Apple 正式推出 Metal 到现在 这个 Metal 系列教程 酝酿了很久 却迟迟没有进展 直到 WWDC 2018 Apple 宣布 iOS 12