ワールド、ビュー、および投影変換のそれぞれに SlimDX マトリックスがあります。http://msdn.microsoft.com/en-gb/library/windows/desktop/bb147302(v=vs.85).aspxによると、射影変換は座標を (-1,1)^3 キューブに残します。
私は、レンダー ターゲットに対するマウスの位置を投影空間に変換し (つまり、(-1,1) の範囲にスケーリングし、z 軸で -1 に固定する)、逆のワールドビュー投影を適用すると考えました。
以下のコードは私の試みを示しています。私のテストでは、アプリを実行し、マウス ホイールを使用してズーム インおよびズーム アウトし、マウス カーソルをウィンドウの左端に置いたまま、印刷された X 座標が変化するかどうかを確認します。
form.MouseMove += (obj, eargs) =>
{
SlimDX.Matrix worldview = SlimDX.Matrix.Multiply(SlimDX.Matrix.Identity, viewMatrix);
SlimDX.Matrix worldviewprojection = SlimDX.Matrix.Multiply(worldview, projectionMatrix);
worldviewprojection.Invert();
var pointX = (float)((2.0 * ((float)eargs.Location.X) / (float)form.Width) - 1.0f);
var pointY = (float)((2.0 * (((float)eargs.Location.Y) / (float)form.Height)) - 1.0f) * -1.0f;
var mouseInProjectionSpace = new Vector4(pointX, pointY, -1.0f, 1.0f);
var mouseInWorldSpace = Vector4.Transform(mouseInProjectionSpace, worldviewprojection);
Console.WriteLine(mouseInWorldSpace);
};
form.MouseWheel += (_, __) =>
{
if (__.Delta > 0)
cam.Z /= 2.0f;
else
cam.Z *= 2.0f;
viewMatrix = GetView(cam);
Console.WriteLine("zzz="+cam.Z);
};
どんな助けでも大歓迎