ゼロからレイ トレーサーを構築しています。私の質問は次のとおりです。カメラ座標を変更すると、球が楕円に変わります。なぜそれが起こっているのかわかりません。
アーティファクトを示すいくつかの画像を次に示します。
Sphere: 1 1 -1 1.0 (Center, radius)
Camera: 0 0 5 0 0 0 0 1 0 45.0 1.0 (eyepos, lookat, up, foy, aspect)
しかし、カメラ座標を変更すると、以下のように球が歪んで見えます。
Camera: -2 -2 2 0 0 0 0 1 0 45.0 1.0
何が悪いのかわかりません。誰かがそれを助けることができれば、それは素晴らしいことです!
imagePlane を次のように設定します。
//Computing u,v,w axes coordinates of Camera as follows:
{
Vector a = Normalize(eye - lookat); //Camera_eye - Camera_lookAt
Vector b = up; //Camera Up Vector
m_w = a;
m_u = b.cross(m_w);
m_u.normalize();
m_v = m_w.cross(m_u);
}
その後、以下に示すように、カメラの位置 (目) から各ピクセルの方向を計算します。
//Then Computing direction as follows:
int half_w = m_width * 0.5;
int half_h = m_height * 0.5;
double half_fy = fovy() * 0.5;
double angle = tan( ( M_PI * half_fy) / (double)180.0 );
for(int k=0; k<pixels.size(); k++){
double j = pixels[k].x(); //width
double i = pixels[k].y(); //height
double XX = aspect() * angle * ( (j - half_w ) / (double)half_w );
double YY = angle * ( (half_h - i ) / (double)half_h );
Vector dir = (m_u * XX + m_v * YY) - m_w ;
directions.push_back(dir);
}
その後:
for each dir:
Ray ray(eye, dir);
int depth = 0;
t_color += Trace(g_primitive, ray, depth);