GetPerspevtive 関数を使用して、Perspective 関数が期待される答えを返すかどうかを確認しようとしています。
私の見解は次のとおりです。
Mat4<Real> Perspective(Real fovy, Real aspect, Real zNear, Real zFar)
{
Real Cotan_fovy = (Real)1.0/Tan(fovy * (Real)0.5);
Mat4<Real> r;
r.SetRow(0, Cotan_fovy/aspect, (Real)0.0, (Real)0.0, (Real)0.0);
r.SetRow(1, (Real)0.0, Cotan_fovy, (Real)0.0, (Real)0.0);
r.SetRow(2, (Real)0.0, (Real)0.0, -(zFar + zNear) / (zFar - zNear), ((Real)2.0* zFar * zNear )/ (zNear - zFar));
r.SetRow(3, (Real)0.0, (Real)0.0, (Real)-1.0, (Real)0.0);
return r;
}
そして、それが私の GetPerspective です:
void GetPerspective(const Mat4<Real>& m, Real& fovy, Real& aspect, Real& zNear, Real& zFar)
{
Real right = (Real)0.0;
Real left = (Real)0.0;
Real top = (Real)0.0;
Real bottom = (Real)0.0;
GetFrustum(m, left, right, bottom, top, zNear, zFar);
fovy = Atan(top / zNear) - Atan(bottom / zNear);
aspect = (right - left) / (top - bottom);
}
問題は、私の入力行列が何であるかに関係なく、GetPerspective は常に位置 (2,3) に -1 を設定することです。