Web开发

注册

 

发新话题 回复该主题

WPF下3D仿真开发第四讲如何产生旋转矩 [复制链接]

1#

问题描述

在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;}

有了函数,大家下去就可以自己调用函数进行相关的效果的实现了。我也正在为模型重建和拆分而烦恼,有好的办法的话,希望大家能够给以支援,在线等待大神的回复!

分享 转发
TOP
发新话题 回复该主题