【发布时间】:2013-01-18 22:15:59
【问题描述】:
我有一个 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);
}
【问题讨论】:
标签: math 3d 2d projection