Metal编程指南
让你从零到壹 上手 metal 开发。
上半部分
学习如何绘制三角形认识。 绘制三角形 等于 学习一门新语言 打印一个 “hello world”
学习坐标和矩阵来设置动画
通过矩阵来渲染3D图形
了解了空间和矩阵知识,学习如何加载3D模型。
下半部分
认识纹理和设置纹理贴图
通过UV坐标对纹理进行裁剪
通过模型来学习法线
学习灯光
最后 做一个游戏
第一章 三角形
为了介绍 Metal 的基本概念,我们从一个简单的三角形示例程序开始。本章将说明绘制一个三角形的 Metal 程序所需要的步骤,我们将要编写的程序只是绘制几何形状 Metal 应用程序的最基本的例子。本章主要分为两个步骤完成:
1. 使用 Metal 进行填充背景色清屏。
2. Metal 中的图元类型。
3. Metal 中的坐标系统。
4. Metal 着色器语言。
5. 绘制一个三角形。
本章将简单介绍从创建到从屏幕中看到三角形步骤的简单的基础知识,在本书的后面,我们将详细介绍这些步骤并进一步说明 API。本章的目的是帮助你构建和运行第一个样本示例,使你对创建 Metal 应用有基础的概念性了解。
Metal 常见错误处理
CompileMetalFile XXX, fatal error: 'XXX.h' file not found
// metal 中 引用其他文件需要其完整的相对路径
fileA.h 在 metal 文件的上层 则需要 #include "../fileA.h"
使用 newDefaultLibrary 获取不到 MTLLibrary
目前遇到这种问题是因为在 .a 库中使用Metal 如果shader 代码不多推荐使用 string来编写
如果代码多请使用 LLVM 来生成 .metallib 文件
xcrun -sdk iphoneos metal MyLibrary.metal -o MyLibrary.air
xcrun -sdk iphoneos metallib MyLibrary.air -o MyLibrary.metallib
string 方式
- (void)config {
NSError *error = NULL;
id<MTLLibrary> defaultLibrary =[_device newLibraryWithSource:[self metalStrings] options:nil error:&error];
// ...
}
- (NSString*)metalStrings {
NSString *str = @"#include <metal_stdlib> \n #include <simd/simd.h> \n using namespace metal; struct LogoData { float4 position [[position]]; }; struct Transform { float4 matrix; }; vertex LogoData loadLogoVertex(constant LogoData *vertices [[buffer(0)]], constant Transform *transform [[buffer(1)]], uint vid [[vertex_id]]) { LogoData out; out.position = vertices[vid].position * transform->matrix; return out; }\n fragment float4 loadLogoFragment(LogoData inData [[stage_in]]) { return float4(0,0.75,1,1); }";
return str;
}
Metal 开发游戏
正在编写 preview1.0 大致是一个逃亡类游戏,后续会上传源码