我有一个 2D 点 (x,y),我想将它投影到一个向量,这样我就可以执行光线追踪来检查用户是否点击了一个 3D 对象,我已经编写了所有其他代码,除非当我回到了我的功能,从鼠标的 xy 线获取矢量,我没有考虑视野,我不想猜测因素是什么,因为“巫毒”修复不是图书馆的好主意。有数学魔术师想帮忙吗?:-)。
这是我当前的代码,需要应用相机的 FOV:
sf::Vector3<float> Camera::Get3DVector(int Posx, int Posy, sf::Vector2<int> ScreenSize){
//not using a "wide lens", and will maintain the aspect ratio of the viewport
int window_x = Posx - ScreenSize.x/2;
int window_y = (ScreenSize.y - Posy) - ScreenSize.y/2;
float Ray_x = float(window_x)/float(ScreenSize.x/2);
float Ray_y = float(window_y)/float(ScreenSize.y/2);
sf::Vector3<float> Vector(Ray_x,Ray_y, -_zNear);
// to global cords
return MultiplyByMatrix((Vector/LengthOfVector(Vector)), _XMatrix, _YMatrix, _ZMatrix);
}