マウスのクリックに基づいて3Dベクトルを計算するために使用している計算はうまくいきますが、実際にはうまくいきます。具体的には、水平軸の視野に基づいて新しい比率を計算するのではなく、水平軸の縦横比によって縦軸に縦軸に表示されます。これは私が気になるのは、視野を線形にスケーリングしているのに対し、水平軸のfov接線を再計算するのは線形ではありません - だから、私のカメラにはわずかに不自然なレンズがありますか?。D3Dのスクリーン座標から3Dベクトルを投影するのが反比例する
ここで私は自分の感性を怒られているラインを隔離しました正常に動作コード、(FOVは水平軸の発現されており、D3Dは、縦軸のためにそれを望んでいることに注意してください)
double mouseX = ((((double) hitPt.x)/(double) vport.cx) - 0.5) * 2.0;
double mouseY = ((1.0 - (((double) hitPt.y)/(double) vport.cy)) - 0.5) * 2.0;
double tfy = tan((fov/aspr) * 0.5);
double tfx = tfy * aspr;
SFMatrix4 CM1;
this->m_renderSurface->GetRawCameraMatrix(CM1);
CM1.Invert();
origin = CM1 * SFVec3f((nearp * tfx) * mouseX,(nearp * tfy) * mouseY,nearp);
dest = CM1 * SFVec3f((farp * tfx) * mouseX,(farp * tfy) * mouseY,farp);
です(tfx = tfy * aspr) - 私はむしろやるだろう tfx = tan(fov)* 0.5; しかし、それはうまくいかない - 中央から離れていくにつれてエラーが増える。 これはD3Dがやることで、私はちょうどそれと一緒に生活しなければならない - 私は好奇心が強い実際に正しいパスがあるかどうか(離散メッシュを使って線形代数を変えようとすると何かが正しいことが分かる)、なぜ
AHAを - 脳が痛い - 仮想カメラが(正確に)円/球面レンズを持っていると仮定され、私は、投影の線形性を混乱しました - 私は迅速をしましたレンズ自体を非対称にする独自の投影機能でテストし、その結果はぼんやりと邪魔していました:-) –