Metal 著色語言程式設計指南 七

2021-07-11 06:28:12 字數 1828 閱讀 3499

floatnxm 和 halfnxm 矩陣可以被看成是型別為floatm和halfm的陣列. 

類似二維陣列, 矩陣的成員可以用二維下標來定址.  矩陣物件後面跟乙個下標可以被看作是乙個列向量. 如同陣列, 列向量的計數也是從0開始, 矩陣物件的第二個下標就如同是對向量物件進行定址。  所以, 矩陣物件後面跟兩個下標就表示了矩陣其中乙個成員, 第乙個下標是列數, 第二個是行數。 

float4x4 m;

// sets the 2nd column to all 2.0

m[1] = float4(2.0f);

// sets the 1st element of the 1st column to 1.0

m[0][0] = 1.0f;

// sets the 4th element of the 3rd column to 3.0

m[2][3] = 3.0f;

使用越界的下標訪問矩陣成員會引發未定義行為, 使用常量表示式下標去訪問矩陣成員會引發編譯錯誤。 

向量的構造

乙個向量可以從標量或者別的向量集合來構造, 當向量初始化時,其構造器引數決定了它是如果被建立的。  例如:如果構造器引數僅僅是乙個標量, 那麼這個向量的所有成員都被初始化為這個標量。  如果構造器引數為多個標量或向量, 或者是標量和向量的組合, 那麼這個向量的成員將自左向右, 被初始化為引數中每個標量或者向量成員。

下面是float4向量的可能的構造方式:

float4(float x);

float4(float x, float y, float z, float w);

float4(float2 a, float2 b);

float4(float2 a, float b, float c);

float4(float a, float b, float2 c);

float4(float a, float2 b, float c);

float4(float3 a, float b);

float4(float a, float3 b);

float4(float4 x);

float3的可能的構造方式:

float3(float x);

float3(float x, float y, float z);

float3(float a, float2 b);

float3(float2 a, float b);

float3(float3 x);

float2 的可能的構造方式:

float2(float x);

float2(float x, float y);

float2(float2 x);

下面是向量構造的例項:

float x = 1.0f, y = 2.0f, z = 3.0f, w = 4.0f;

float4 a = float4(0.0f);

float4 b = float4(x, y, z, w);

float2 c = float2(5.0f, 6.0f);

float2 a = float2(x, y);

float2 b = float2(z, w);

float4 x = float4(a.xy, b.xy);

構造器引數不足將引發編譯錯誤:

float4 a = float4(0.0f, 0.0f, 0.0f)

Metal 著色語言程式設計指南 一

metal shading language guide 這篇文章講述了metal 圖形繪製和計算 shading 程式語言.metal shading 語言是基於c 的程式語言,使用metal shading 語言的 可以在gpu上進行圖形繪製或者通用平行計算。由於metal shading 語言...

Metal 著色語言程式設計指南 四

metal shading 語言的向量數學庫提供了對向量和矩陣型別表示和運算的支援。向量的命名規則如下所示 booln,charn,shortn,intn,uncharn,ushortn,uintn halfn,floatn 這裡 n 可以是 2,3,4 的其中乙個數字,表示 2 3 4 維向量。矩...

Metal 著色語言程式設計指南 八

構造矩陣物件 同向量物件的構造相似,矩陣物件也可以從標量或者向量集合來構造,當矩陣初始化時,其構造器引數決定了它是如何被建立的。例如,如果構造器引數僅僅是乙個標量,那麼這個矩陣的對角線上的成員被初始化為這個標量,其他成員被初始化為0.0。下面的這個呼叫 float4x4 fval 構造的矩陣為 fv...