【问题标题】:Calculating 3D Coordinate计算 3D 坐标
【发布时间】:2015-01-29 11:26:44
【问题描述】:

我最近一直在尝试计算鼠标位置之外的 3D 点。到目前为止,我有这个:

const D3DXMATRIX* pmatProj = g_Camera.GetProjMatrix();

POINT ptCursor;
GetCursorPos( &ptCursor );
ScreenToClient( DXUTGetHWND(), &ptCursor );

// Compute the vector of the pick ray in screen space
D3DXVECTOR3 v;
v.x = ( ( ( 2.0f * ptCursor.x ) / pd3dsdBackBuffer->Width ) - 1 ) / pmatProj->_11;
v.y = -( ( ( 2.0f * ptCursor.y ) / pd3dsdBackBuffer->Height ) - 1 ) / pmatProj->_22;
v.z = 1.0f;

// Get the inverse view matrix
const D3DXMATRIX matView = *g_Camera.GetViewMatrix();
const D3DXMATRIX matWorld = *g_Camera.GetWorldMatrix();
D3DXMATRIX mWorldView = matWorld * matView;
D3DXMATRIX m;
D3DXMatrixInverse( &m, NULL, &mWorldView );

// Transform the screen space pick ray into 3D space
vPickRayDir.x = v.x * m._11 + v.y * m._21 + v.z * m._31;
vPickRayDir.y = v.x * m._12 + v.y * m._22 + v.z * m._32;
vPickRayDir.z = v.x * m._13 + v.y * m._23 + v.z * m._33;
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43;

但是,由于我的数学能力欠佳,我不确定如何利用方向和原点来生成位置。我需要执行哪些计算/公式才能产生所需的结果?

【问题讨论】:

    标签: c++ math directx directx-11 reverseprojection


    【解决方案1】:

    就像a * x + b,除了三遍。

    对于dvPickRayOrig 之间的任何距离(正或负):

    newPos.x = d * vPickRayDir.x + vPickRayOrig.x;
    newPos.y = d * vPickRayDir.y + vPickRayOrig.y;
    newPos.z = d * vPickRayDir.z + vPickRayOrig.z;
    

    【讨论】:

      猜你喜欢
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多