问题描述
在3D开发中,我们要根据输入的角度产生旋转角度,从而实现三维模型相关的旋转,那么在WPF下如何产生旋转矩阵呢?
旋转矩阵是什么?
WPF中的旋转矩阵是一个4x4的方阵,包括旋转和平移参数,因此在原来的3x3矩阵上,多出来了一维平移元素,变为了4x4的一个方阵。
其元素一般标记为M11,M12,M13,M14,M21,M22,M23,M24,M31,M32,M33,M34,M41,M42,M43,M44。
其中的数值分别代表的是旋转后的cos值或者sin值生成的矩阵。其具体生成矩阵代表的元素含义见下面产生旋转矩阵源码:
如何产生旋转矩阵?如何使用源码实现?
privateMatrixdoubleConvert2Matrix(Matrix3Dmt3)
{
varmb=Matrixdouble.Build;
varmt=mb.DenseOfArray(new[,]{
{mt3.M11,mt3.M12,mt3.M13,mt3.M14},
{mt3.M21,mt3.M22,mt3.M23,mt3.M24},
{mt3.M31,mt3.M32,mt3.M33,mt3.M34},
{mt3.OffsetX,mt3.OffsetY,mt3.OffsetZ,mt3.M44}
});
returnmt;
}
根据4x4方阵含义,给出绕y轴旋转角度,如何产生4x4矩阵呢?源码如下:
privateMatrix3DRotateYTransform(doubletheta)
{theta=theta*Math.PI/;
doublesin=Math.Sin(theta);
doublecos=Math.Cos(theta);
Matrix3Dm=newMatrix3D();
m.M11=cos;m.M12=0.0;m.M13=-sin;m.M14=0.0;
m.M21=0.0;m.M22=1.0;m.M23=0.0;m.M24=0.0;
m.M31=sin;m.M32=0.0;m.M33=cos;m.M34=0.0;
m.OffsetX=0.0;m.OffsetY=0.0;m.OffsetZ=0.0;m.M44=1.0;
returnm;}
有了函数,大家下去就可以自己调用函数进行相关的效果的实现了。我也正在为模型重建和拆分而烦恼,有好的办法的话,希望大家能够给以支援,在线等待大神的回复!