使用QT进行3D数学运算:创建视图矩阵

时间:2015-09-04 11:51:52

标签: c++ qt math matrix 3d

我正在尝试使用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);

这样可以得到正确的结果:

x-y plane

此图仅丢弃z坐标。

我做错了什么? 看起来Qt已经倒了吗?

0 个答案:

没有答案