在openGL中使用透视图

时间:2018-02-21 10:12:23

标签: qt opengl

我想从目前的观点中得到光线。

我生成以下投影矩阵:

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来做呢?

1 个答案:

答案 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是相机屏幕上的一个点