今回数学クラスを作成した理由は、
主にhlslでのfloat〇,float〇x〇等の使用感で書きたかったからです。
value.xy = 2.0f;
まぁ使い道があるかは微妙ですが。
実装する上でテンプレートを使用しており、
TVectorクラスから型と要素数の指定をする必要があります。
TVector<float,3>等
ここもhlslと一緒ですね。
よく使用するfloat2,float3,float4はusingで名前を付けています。
TVectorクラスを見たらわかると思いますが、可変長引数は使用していません。
float2 vec2 = float2(1.0f,2.0f);
のような基本型を引数とする場合と
float4 vec4 = float4(vec2,float2(3.0f,4.0f));
float4 vec41 = float4(float1(5.0f).vec4.XY(),float1(6.0f));
のように複数のTVector型を引数にする2つの方法がとれます。
後者の場合、一つの引数でもfloat1(0.0f)のような書き方をしないといけませんが
上で少し触れていますが、
.XY() = 2.0f;
のように、関数ではありますが最初の目的は達成しています。
.CX()などの関数は、const指定で変更できないようになっているだけです。
問題点として
float x = vec.X();
ができないです。変換関数を用意したのですが他のところで問題が起きたので
このままになりました。
上記の値を渡したいときは
float x = vec.X().At(0);と少し面倒な書き方をしてください
(もしいい方法があったら教えてください)
行列クラスもベクトルクラスと同様
TMatrix<float,4,4>のように型と行、列を指定して作成できます。
float4x4(flaot4(),float4(),float4(),floa4());
ここも多分hlslと一緒
._1() = float4(2.0f,4.0f,5.0f,1,9f);
等が使用することができます。
世の中には、DirectXMathやその他数学ライブラリが大量にあるなかで
わざわざ数学クラスを作成しましたが、
今回の目的の一環は最初に書いたような目的外に
float2x2 float3x3,float4x4みたいな全パターンのクラスを作成するのがめんどくさかった
後、勉強の為ですねはい。
既存のライブラリをラッピングするだけでも良かった気がしますが
気にしないでおきます。
速度うっ頭が