计算地形上的观察矩阵
calculate look at matrix on terrain
希望有人能帮助我。我在地形上有一辆卡丁车,从那里我得到了卡丁车中心、左前轮和右前轮的位置。我需要的是一个矩阵来旋转卡丁车,使其平放在地形上。
所有 vector3。 Forward是方向向量。
到目前为止我有这个但是它没有按预期工作
D3DXVECTOR3 cross, cross1;
cross = kartposition - Lwheelposition;
cross1 = kartposition - Rwheelposition;
D3DXVec3Cross(&up, &cross, &cross1);
D3DXVec3Normalize(&up, &up);
D3DXVec3Cross(&right, &forward,&up);
D3DXVec3Normalize(&right, &right);
D3DXVec3Cross(&forward, &up,&right);
D3DXVec3Normalize(&forward, &forward);
D3DXMatrixLookAtLH(&localtransform[0], &D3DXVECTOR3(0, 0, 0) ,&(forward), &up);
任何建议都很好。
我相信已经解决了。
已将 2 行更改为
cross = Lwheelposition-kartposition ;
cross1 =Rwheelposition - kartposition ;
并添加到最后
D3DXMatrixInverse(&localtransform[0],NULL,&localtransform[0]);
反转查看功能的操作。
后来参考
修改解决了这个问题
(DirectX) Generating a rotation matrix to match a vector
最终代码如下
D3DXVECTOR3 cross, cross1;
cross = Lwheelposition - kartposition;
cross1 = Rwheelposition - kartposition;
D3DXVec3Cross(&up, &cross, &cross1);
D3DXVec3Normalize(&up, &up);
D3DXVec3Cross(&right, &up,&forward);
D3DXVec3Normalize(&right, &right);
D3DXVec3Cross(&kartforward, &right, &up);
localtransform[0]=D3DXMATRIX (right.x, right.y, right.z, 0.0f,
up.x, up.y, up.z, 0.0f,
kartforward.x, kartforward.y, kartforward.z, 0.0f,
kartposition.x, kartposition.y, kartposition.z, 1.0f);
希望对您有所帮助。
希望有人能帮助我。我在地形上有一辆卡丁车,从那里我得到了卡丁车中心、左前轮和右前轮的位置。我需要的是一个矩阵来旋转卡丁车,使其平放在地形上。
所有 vector3。 Forward是方向向量。
到目前为止我有这个但是它没有按预期工作
D3DXVECTOR3 cross, cross1;
cross = kartposition - Lwheelposition;
cross1 = kartposition - Rwheelposition;
D3DXVec3Cross(&up, &cross, &cross1);
D3DXVec3Normalize(&up, &up);
D3DXVec3Cross(&right, &forward,&up);
D3DXVec3Normalize(&right, &right);
D3DXVec3Cross(&forward, &up,&right);
D3DXVec3Normalize(&forward, &forward);
D3DXMatrixLookAtLH(&localtransform[0], &D3DXVECTOR3(0, 0, 0) ,&(forward), &up);
任何建议都很好。
我相信已经解决了。
已将 2 行更改为
cross = Lwheelposition-kartposition ; cross1 =Rwheelposition - kartposition ;
并添加到最后
D3DXMatrixInverse(&localtransform[0],NULL,&localtransform[0]);
反转查看功能的操作。
后来参考
修改解决了这个问题(DirectX) Generating a rotation matrix to match a vector
最终代码如下
D3DXVECTOR3 cross, cross1;
cross = Lwheelposition - kartposition;
cross1 = Rwheelposition - kartposition;
D3DXVec3Cross(&up, &cross, &cross1);
D3DXVec3Normalize(&up, &up);
D3DXVec3Cross(&right, &up,&forward);
D3DXVec3Normalize(&right, &right);
D3DXVec3Cross(&kartforward, &right, &up);
localtransform[0]=D3DXMATRIX (right.x, right.y, right.z, 0.0f,
up.x, up.y, up.z, 0.0f,
kartforward.x, kartforward.y, kartforward.z, 0.0f,
kartposition.x, kartposition.y, kartposition.z, 1.0f);
希望对您有所帮助。