【发布时间】:2014-10-01 13:59:42
【问题描述】:
我尝试了 4 种方法,但都没有奏效。我的代码在其他任何地方都能正常工作,相机正确移动,物体也正确移动。
我正在使用 SharpDX,我的投影矩阵是透视投影矩阵。
我正在尝试获取 3d 点的屏幕位置,以便将光标定位在该点。
这是我尝试过的 4 种方法:
public Vector2 WorldPosToScreenPos1(Vector3 p)
{
Vector3.Transform(ref p, ref View, out p);
Vector3.Transform(ref p, ref Projection, out p);
return new Vector2(
RenderForm.ClientSize.Width * (p.X + 1) / 2,
RenderForm.ClientSize.Height * (1 - (p.Y + 1) / 2)
);
}
public Vector2 WorldPosToScreenPos2(Vector3 p)
{
Vector3.Transform(ref p, ref View, out p);
Vector3.Transform(ref p, ref Projection, out p);
p.X /= p.Z;
p.Y /= p.Z;
p.X = (p.X + 1) * RenderForm.ClientSize.Width / 2;
p.Y = (p.Y + 1) * RenderForm.ClientSize.Height / 2;
return new Vector2(p.X, p.Y);
}
public Vector2 WorldPosToScreenPos3(Vector3 p)
{
Viewport viewport = new Viewport(0, 0, RenderForm.ClientSize.Width, RenderForm.ClientSize.Height);
viewport.Project(ref p, ref ViewProj, out p);
return new Vector2(p.X, p.Y);
}
public Vector2 WorldPosToScreenPos4(Vector3 p)
{
Vector3.Project(p, 0, 0, RenderForm.ClientSize.Width, RenderForm.ClientSize.Height, 1, 10000, ViewProj);
return new Vector2(p.X, p.Y);
}
在所有四种方法(都给出不同的结果)中,我得到的 2d 位置是偏离的,通常相差很大。我做错了什么?
【问题讨论】:
标签: matrix 3d geometry computational-geometry sharpdx