0
編輯:解決問題,見我自己的答案DirectXMath Unproject在錯誤的軸
最近我一直在努力將使用採摘提高或降低地形3D世界編輯器。我正在使用相機未投影和光線投射來查找鼠標屏幕座標的世界位置。
但是,它似乎是光線在錯誤的軸上。正如我記得的那樣,應該從相機中直接射出應該從未計劃出來的光線。
Here是它目前的樣子的一個例子。
我的問題是,爲什麼當它應該在Z軸上時,Y軸上的光線?
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;
}
乾杯!