我想从目前的观点中得到光线。
我生成以下投影矩阵:
QMatrix4x4 m_proj;
...
m_proj.perspective(camFOV, ar, camZnear, camZfar);
当我在3d中应用一个点时,我得到了归一化坐标(范围为[-1 1])。
如果我收到点击事件,我会将坐标标准化为[-1 1]并将其乘以m_proj.inverted()
,但我得到奇怪的结果(数字大于1)。
换句话说,如何将屏幕(x,y)坐标中的单击转换为摄像机坐标系中的光线?
编辑:
这是与Qt OpenGL- How to get the object based on the mouse click类似的问题 但是我如何用现代的opengl来做呢?
答案 0 :(得分:0)
对于将来的用户:
QVector4D uv(xy.x() / m_w * 2 - 1, -(xy.y() / m_h * 2 - 1),1,1);
QVector3D sv = m_proj.inverted() * uv;
sv
是相机屏幕上的一个点