khatarat کاربر جدید
تاريخ عضويت: جمعه 11 بهمن 1387 تعداد ارسالها: 10
3 شنبه 15 بهمن 1387 - 19:47 |
|
|
این رو که خودم هم می دونم مشکل من ساختن این rotation matrix است.
من می خوام زاویه های اویلر استفاده کنم.
تنها راهی که به ذهنم رسید اینه که این هم عمل نمی کنه.
public void Rotate(Vector3 Rot)
{
xang += Rot.X;
yang += Rot.Y;
zang += Rot.Z;
if (xang >= 360)
xang -= 360;
if (yang >= 360)
yang -= 360;
if (zang >= 360)
zang -= 360;
//rot = Matrix.RotationX(Geometry.DegreeToRadian(xang)) * Matrix.RotationZ(Geometry.DegreeToRadian(zang)) *Matrix.RotationY(Geometry.DegreeToRadian(yang));
//xmat = ymat = zmat = Matrix.Zero;
xmat.M11 = 1;
ymat.M12 = 1;
zmat.M13 = 1;
rot = Matrix.RotationAxis(new Vector3(zmat.M11,zmat.M12,zmat.M13),Geometry.DegreeToRadian(zang));
xmat *= Matrix.RotationAxis(new Vector3(zmat.M11, zmat.M12, zmat.M13), Geometry.DegreeToRadian(zang));
ymat *= Matrix.RotationAxis(new Vector3(zmat.M11, zmat.M12, zmat.M13), Geometry.DegreeToRadian(zang));
rot *= Matrix.RotationAxis(new Vector3(xmat.M11, xmat.M12, xmat.M13),Geometry.DegreeToRadian(xang));
//rotx = Matrix.RotationAxis(new Vector3(xmat.M11, xmat.M12, xmat.M13), Geometry.DegreeToRadian(xang));
xmat *= Matrix.RotationAxis(new Vector3(xmat.M11, xmat.M12, xmat.M13), Geometry.DegreeToRadian(xang));
ymat *= Matrix.RotationAxis(new Vector3(xmat.M11, xmat.M12, xmat.M13), Geometry.DegreeToRadian(xang));
rot *= Matrix.RotationAxis(new Vector3(ymat.M11, ymat.M12, ymat.M13), Geometry.DegreeToRadian(yang));
//roty = Matrix.RotationAxis(new Vector3(ymat.M11, ymat.M12, ymat.M13), Geometry.DegreeToRadian(yang));
اگر می خوای بدونی منظور من از محلی چیه یه سر به نرم افزار های سه بعدی بزن و نوع چرخش رو local انتخاب کن می بینی که وقتی شی رو حول یک محور دوران می دیم دو محور دیگه هم به همون اندازه می چرخند.و وقتی می خوایم شی رو حول محور های دیگه دوران بدیم حول محور های جدید می چرخند. |
|
|