c++ - 光线拾取方向计算不正确

标签 c++ math directx raytracing

我有以下功能代码:

D3DXVECTOR3 Mouse::GetClickDirection(D3DXMATRIX projMatrix, D3DXMATRIX viewMatrix, D3DXVECTOR3 cameraPosition)
{
    POINT mousePoint;
    GetCursorPos(&mousePoint);

    ScreenToClient(hwnd, &mousePoint);

    float x = ((mousePoint.x * 2.0f) / (float)backBufferWidth) - 1.0f;
    float y = ((mousePoint.y * -2.0f) / (float)backBufferHeight) + 1.0f;

    D3DXVECTOR3 mouseClip = D3DXVECTOR3(x, y, 1.0f);

    D3DXMATRIX invViewMatrix;
    D3DXMatrixInverse(&invViewMatrix, 0, &viewMatrix);

    D3DXMATRIX invProjMatrix;
    D3DXMatrixInverse(&invProjMatrix, 0, &projMatrix);

    D3DXMATRIX inversedMatrix = invViewMatrix * invProjMatrix;

    D3DXVECTOR3 mouseWorldSpace;
    D3DXVec3TransformCoord(&mouseWorldSpace, &mouseClip, &inversedMatrix);

    D3DXVECTOR3 direction = mouseWorldSpace - cameraPosition;

    D3DXVec3Normalize(&direction, &direction);

    system("CLS");
    std::cout << "sX: " << x << std::endl;
    std::cout << "sY: " << y << std::endl;

    std::cout << "X: " << direction.x << std::endl;
    std::cout << "Y: " << direction.y << std::endl;
    std::cout << "Z: " << direction.z << std::endl;

    return direction;
}

我正在尝试根据用户在我的 DirectX 3D 应用程序中单击的 x 和 y 屏幕点来计算和创建定向射线。到目前为止,打印的结果似乎表明我的计算是错误的,因为 Z 值总是在 0.9 左右,我不知道为什么。我到底做错了什么?请帮忙。谢谢

最佳答案

我认为你的逆矩阵计算是倒退的。

D3DXMATRIX inversedMatrix = invProjMatrix * invViewMatrix;

关于c++ - 光线拾取方向计算不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664787/

相关文章:

algorithm - 具有误差控制的有理幂根的有理逼近

string - 将字符串转换为算术运算符

javascript - 具有内三 Angular 形的二次贝塞尔曲线

c++ - Present() 中奇怪的 Direct3D 内存行为

c++ - 在 OpenCV 中合并两个 Mat 对象

c++ - 打开文件功能出现问题

c++ - Cython:如何包装公共(public)成员变量是自定义对象的 C++ 类?

c++ - 为什么命令不执行?

c++ - 使用 D3DXVectors c++ 进行碰撞检测,发生碰撞后要做什么?

c++ - 将 SpriteBatch 与 Direct3D 和 XAML 结合使用