Metal編程指南
讓你從零到壹 上手 metal 開(kāi)發(fā)。
上半部分
學(xué)習(xí)如何繪制三角形認(rèn)識(shí)。 繪制三角形 等于 學(xué)習(xí)一門(mén)新語(yǔ)言 打印一個(gè) “hello world”
學(xué)習(xí)坐標(biāo)和矩陣來(lái)設(shè)置動(dòng)畫(huà)
通過(guò)矩陣來(lái)渲染3D圖形
了解了空間和矩陣知識(shí),學(xué)習(xí)如何加載3D模型。
下半部分
認(rèn)識(shí)紋理和設(shè)置紋理貼圖
通過(guò)UV坐標(biāo)對(duì)紋理進(jìn)行裁剪
通過(guò)模型來(lái)學(xué)習(xí)法線
學(xué)習(xí)燈光
最后 做一個(gè)游戲
第一章 三角形
為了介紹 Metal 的基本概念,我們從一個(gè)簡(jiǎn)單的三角形示例程序開(kāi)始。本章將說(shuō)明繪制一個(gè)三角形的 Metal 程序所需要的步驟,我們將要編寫(xiě)的程序只是繪制幾何形狀 Metal 應(yīng)用程序的最基本的例子。本章主要分為兩個(gè)步驟完成:
1. 使用 Metal 進(jìn)行填充背景色清屏。
2. Metal 中的圖元類(lèi)型。
3. Metal 中的坐標(biāo)系統(tǒng)。
4. Metal 著色器語(yǔ)言。
5. 繪制一個(gè)三角形。
本章將簡(jiǎn)單介紹從創(chuàng)建到從屏幕中看到三角形步驟的簡(jiǎn)單的基礎(chǔ)知識(shí),在本書(shū)的后面,我們將詳細(xì)介紹這些步驟并進(jìn)一步說(shuō)明 API。本章的目的是幫助你構(gòu)建和運(yùn)行第一個(gè)樣本示例,使你對(duì)創(chuàng)建 Metal 應(yīng)用有基礎(chǔ)的概念性了解。
Metal 常見(jiàn)錯(cuò)誤處理
CompileMetalFile XXX, fatal error: 'XXX.h' file not found
// metal 中 引用其他文件需要其完整的相對(duì)路徑
fileA.h 在 metal 文件的上層 則需要 #include "../fileA.h"
使用 newDefaultLibrary 獲取不到 MTLLibrary
目前遇到這種問(wèn)題是因?yàn)樵?.a 庫(kù)中使用Metal 如果shader 代碼不多推薦使用 string來(lái)編寫(xiě)
如果代碼多請(qǐng)使用 LLVM 來(lái)生成 .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 開(kāi)發(fā)游戲
正在編寫(xiě) preview1.0 大致是一個(gè)逃亡類(lèi)游戲,后續(xù)會(huì)上傳源碼