|
|
发表于 2005-4-6 10:31:00
|
显示全部楼层
Re:空间中两个垂直的向量,各自延相同的任意向量旋转后
虽然浮点误差是这个问题的答案, 坐标变换还是有问题。 还是一样,向量的坐标变换用D3DXVec3TransformNormal, 点用D3DXVec3TransformCoord。 D3DXVec3Transform和D3DXVec3TransformCoord相似,区别在于前者变换后将w投射回1。这里给出的代码是看不出问题的,因为它的座标变换矩阵只包含了旋转而没有平移的部分。这恰恰是点的坐标变换和向量坐标变换的区别。
D3DXMATRIX matTrans, matRot, matTransRot;
D3DXMatrixTranslation( &matTrans, 10.0f, 10.0f, 10.0f );
D3DXMatrixRotationX( &matRot, D3DX_PI * 0.25f );
matTransRot = matTrans * matRot;
D3DXVECTOR3 vec1( 0.0f, 1.0f, 0.0f );
D3DXVECTOR3 vec2( 1.0f, 0.0f, 0.0f );
D3DXVec3TransformCoord( &vec1, &vec1, &matTransRot );
D3DXVec3TransformCoord( &vec2, &vec2, &matTransRot );
float vDot = D3DXVec3Dot( &vec1, &vec2 );
最终vDot为319.99994. |
|