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...