编辑:解决了问题,请看我自己的答案
最近,我一直在做一个3D世界编辑器,它将使用采摘来提升或降低地形。我使用相机非投影和光线投射来查找鼠标屏幕坐标的世界位置。
然而,光线似乎是在错误的轴上。正如我所记得的,光线应该是从相机中直接射出来的。
这里就是它目前样子的一个例子。
我的问题是,为什么射线在Y轴上,而它应该在Z轴上?
XMFLOAT3 D3D11Camera::Unproject(const float& px, const float& py, const float& pz)
{
const XMFLOAT2& res = D3D11RenderSettings::Instance()->resolution();
XMVECTOR coords = XMVector3Unproject(XMVectorSet(px, res.y - py, pz, 0.0f), 0.0f, 0.0f, res.x, res.y, near_plane_, far_plane_, projection_, view_, XMMatrixIdentity());
XMFLOAT3 to_ret;
XMStoreFloat3(&to_ret, coords);
return to_ret;
}这是非投影代码..。
我就是这么用它的
projectRay: function()
{
var p = Mouse.position(MousePosition.Relative);
p.x = (p.x + RenderSettings.resolution().w / 2);
p.y = (p.y + RenderSettings.resolution().h / 2);
var unprojA = this._camera.unproject(p.x, p.y, 0);
var unprojB = this._camera.unproject(p.x, p.y, 1);
var dir = Vector3D.normalise(Vector3D.sub(unprojB, unprojA));
var ray = Ray.construct(unprojA, dir);
var p1 = ray.origin;
var p2 = Vector3D.add(ray.origin, Vector3D.mul(ray.direction, 1000));
RenderTargets.ui.drawLine(p1.x, p1.y, p1.z, 1, 0, 0, p2.x, p2.y, p2.z, 1, 0, 0);
return ray;
}干杯!
发布于 2015-04-12 16:32:01
撇开愚蠢不说,我的工作是一个倒转的Y轴坐标系和一个默认的-非反转-1。它看起来像是垂直方向的射线,但实际上它是朝向'/‘方向的射线,而它应该是像'\’那样定向的。将结果的Y分量乘以-1解决了这个问题。
https://stackoverflow.com/questions/29588691
复制相似问题