要将鼠标转换为射线,请执行以下过程:
将鼠标坐标从像素坐标转换为 -1/1 坐标(-1,-1 位于左下方)。
射线原点将是(近平面处的矢量)
vector3 origin = vector3(mousex,mousey,0);
射线端是(远平面上的矢量)
vector3 far = vector3(mousex,mousey,1);
现在你需要对这些向量应用变换,首先你需要为它创建变换矩阵:
matrix4x4 inverseviewproj = invertmatrix(view * proj)
将此变换应用于两个向量:
vector3 rayorigin = transform(origin, inverseviewproj);
vector3 rayend = transform(far, inverseviewproj);
你的光线方向是:
vector3 raydirection = normalize(rayend-rayorigin);
就是这样,现在您可以使用光线投射功能了。
如果您只能访问 vector4 以通过矩阵变换向量,则 w 分量需要为 1,例如:
vector4 origin = vector3(mousex,mousey,0,1);
vector4 far = vector3(mousex,mousey,1,1);
要提取方向,请确保首先将 vector4 转换为 vector3 (否则会影响归一化)。