我正在尝试使用Qt的4x4矩阵将3D坐标转换为屏幕空间。
这是设置:
QVector3D pointx(0.5,0,0);
QMatrix4x4* mat=new QMatrix4x4();
mat->lookAt({1,0,0},{0,0,0},{0,1,0});
*mat=mat->inverted();
pointx=mat->map(pointx);
它是一个单点,位于x轴上。
Matrix由lookAt创建。它位于x轴的(1,0,0)处,并查看坐标系的原点。向上是y方向。 这是相机的变换矩阵。为了获得视图矩阵,我将其反转。
视图矩阵与点的相乘应返回(0,0,0.5)。 x和y坐标居中,点的深度为0.5。实际结果是:(1,0,-0.5)。
我尝试了另一个设置:沿着z-Achsis的相机,x-y平面上的三个点:
QVector3D pointx(0.5,0,0);
QVector3D pointy(0,0.5,0);
QVector3D pointz(0,0,0.5);
QMatrix4x4* mat=new QMatrix4x4();
mat->setToIdentity();
mat->lookAt({0,0,1},{0,0,0},{0,1,0});
*mat=mat->inverted();
pointx=mat->map(pointx);
pointy=mat->map(pointy);
pointz=mat->map(pointz);
这样可以得到正确的结果:
此图仅丢弃z坐标。
我做错了什么? 看起来Qt已经倒了吗?