0
私はこのraytracerのソースコードを見ていました。ライン145でalgebra3.cpp
という名前のファイルに私たちは、この機能を見ることができます:この戻り値の型はなぜ有効ですか?
inline vec2 operator * (const mat3& a, const vec2& v) {
vec3 av;
av.n[VX] = a.v[0].n[VX]*v.n[VX] + a.v[0].n[VY]*v.n[VY] + a.v[0].n[VZ];
av.n[VY] = a.v[1].n[VX]*v.n[VX] + a.v[1].n[VY]*v.n[VY] + a.v[1].n[VZ];
av.n[VZ] = a.v[2].n[VX]*v.n[VX] + a.v[2].n[VY]*v.n[VY] + a.v[2].n[VZ];
return av;
}
それはそのがvec3
を返す代わりにvec2
オブジェクトを返す必要があります。何故ですか?
トップのソースコード:「1次元(2d、3d、または4d)のベクトルは、より高い次元または低い次元のベクトル にキャストできます。高次元へのキャストの場合、 の値が指定されていない限り、新しいコンポーネントはデフォルトで1.0に設定されます。 vec3 a(1.0、2.0、3.0); vec4 b(a、4.0); //今、b == {1.0、2.0、3.0、4.0}; 下位次元にキャストするとき、ベクトルは下位次元の で均質化されます。たとえば、4d {X、Y、Z、W}が3Dにキャストされた場合、結果のベクトルは{X/W、Y/W、Z/W}になります。キャストする前に、4番目のコンポーネントがゼロでないことを保証するのは、ユーザーには までです。 – EdChum
ベクトルがさまざまな種類の上位/下位次元にキャストできると記載されています – EdChum
エラーである場合があります。コンパイラがvec3からvec2に変換するようです。 –