在DirectX中將屏幕坐標(biāo)轉(zhuǎn)成空間坐標(biāo)

字號(hào):

123456789101112131415 Point p = Cursor.Position;
    p = this.PointToClient(p);
    Vector3 v1 = new Vector3(p.X, p.Y, 0f);
    v1.Unproject(this.GraphicDevice.Viewport, this.GraphicDevice.Transform.Projection,
     this.GraphicDevice.Transform.View, this.GraphicDevice.Transform.World);
    Vector3 v2 = new Vector3(p.X, p.Y, 1f);
    v2.Unproject(this.GraphicDevice.Viewport, this.GraphicDevice.Transform.Projection,
    this.GraphicDevice.Transform.View, this.GraphicDevice.Transform.World);
    float fParam = (v1.Y - 0f) / (v1.Y - v2.Y);
    Vector3 v3 = new Vector3();
    v3.X = v1.X - (v1.X - v2.X) * fParam;
    v3.Y = 0;
    v3.Z = v1.Z - (v1.Z - v2.Z) * fParam;
    先算出Z=0,Z=1兩種情況的空間點(diǎn),也就是剪切的最近和最遠(yuǎn)距離,然后根據(jù)Y=f3DY(我這里直接將f3DY設(shè)置成0了,參見(jiàn)第10行代碼)來(lái)進(jìn)行一次剪切,按比例得到X,Z。
    V3便是計(jì)算之后的坐標(biāo)