CTL は C / C++ のサブセットになっていますが、仕様が拡張されている部分もあります。C / C++ の標準ではない組み込み関数が用意されています。今回は行列を計算する組み込み関数を紹介します。
https://ampasctl.sourceforge.net/CtlManual.pdf
■行列を計算する組み込み関数
float[3] mult_f_f3 (float f, float x[3])
float[3] add_f3_f3 (float x[3], float y[3])
float[3] sub_f3_f3 (float x[3], float y[3])
float[3] cross_f3_f3 (float x[3], float y[3])
float dot_f3_f3 (float x[3], float y[3])
float length_f3 (float x[3])
float[3][3] mult_f33_f33 (float A[3][3], float B[3][3])
float[4][4] mult_f44_f44 (float A[4][4], float B[4][4])
float[3][3] mult_f_f33 (float f, float A[3][3])
float[4][4] mult_f_f44 (float f, float A[4][4])
float[3][3] add_f33_f33 (float A[3][3], float B[3][3])
float[4][4] add_f44_f44 (float A[4][4], float B[4][4])
float[3][3] invert_f33 (float A[3][3])
float[4][4] invert_f44 (float A[4][4])
float[3][3] transpose_f33 (float A[3][3])
float[4][4] transpose_f44 (float A[4][4])
float[3] mult_f3_f33 (float x[3], float A[3][3])
float[3] mult_f3_f44 (float x[3], float A[4][4])
以上の組み込み関数の内、頭の float[3] などという部分は、戻り値の変数型を示し (例えば、float[3] なら浮動小数点の要素3の配列)、実際に使う時はユーザは指定する必要はありません。引数の float x[3], float A[3][3] という部分は引数の変数型を示します。なお、x は行、y は列、A, B は正方行列です。基本、各ピクセルの r, g, b もしくは、r, g, b, l 計算を行うので、組み込み関数で用意されているのは最大 4 x 4 の行列の計算までです。
そして、組み込み関数名を見ると何をする関数かが分かり、add は加算、sub は減算、mult は積算、transpose は転置、invert は逆行列、cross は外積 (クロス積)、dot は内積 (ドット積) です。
そのあと f3 なら float型の3要素の配列、f44 なら float型の 4 x 4 の配列という意味です。