gpt4 book ai didi

c++ - 3D 屏幕空间光线转换/拾取 DirectX9

转载 作者:行者123 更新时间:2023-11-28 03:08:12 25 4
gpt4 key购买 nike

我需要根据特定深度(用于光线转换)将 2D 鼠标坐标转换为 3D 世界坐标。我没有直接在 C++ 中使用 DirectX,我使用的是专有语言,但如果你用 C++ 或伪代码(首选 C++)给我一个答案,我可以转换它。

我可以访问世界矩阵、 View 矩阵和投影矩阵以及各种矩阵操作函数。

如果需要将 vector4 乘以 matrix4,我唯一可用的同时接受 vector4 和 matrix4 的函数是 transformVector4(vector4Source,matrix4Source)。如果重要的话,我不确定将它们相乘的顺序。

任何帮助将不胜感激:)我已经为此工作了几个小时,但我只是不懂 3D 数学......

最佳答案

要将您的鼠标转换为射线,您需要执行以下过程:

将鼠标坐标从像素坐标转换为 -1/1 坐标(-1,-1 为左下角)。

射线原点将是(近平面处的 vector )

vector3 origin = vector3(mousex,mousey,0);

射线端点为(远平面 vector )

vector3 far = vector3(mousex,mousey,1);

现在您需要对这些 vector 应用变换,首先您需要为其创建变换矩阵:

matrix4x4 inverseviewproj = invertmatrix(view * proj)

将此转换应用于两个 vector :

vector3 rayorigin = transform(origin, inverseviewproj);
vector3 rayend = transform(far, inverseviewproj);

你的光线方向是:

vector3 raydirection = normalize(rayend-rayorigin);

就是这样,现在您可以使用光线转换函数了。

如果您只能访问 vector4 以通过矩阵转换 vector ,w 分量需要为 1,例如:

vector4 origin = vector3(mousex,mousey,0,1);
vector4 far = vector3(mousex,mousey,1,1);

要提取方向,请务必先将 vector4 转换为 vector3(否则会影响归一化)。

关于c++ - 3D 屏幕空间光线转换/拾取 DirectX9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19150215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com