private float[] CalculateSRT3x4(BfresLibrary.TexSrt texSrt) { var m = CalculateSRT2x3(texSrt); return(new float[12] { m[0], m[2], m[4], 0.0f, m[1], m[3], m[5], 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, }); }
private float[] CalculateSRT2x3(BfresLibrary.TexSrt texSrt) { var scaling = texSrt.Scaling; var translate = texSrt.Translation; float cosR = (float)Math.Cos(texSrt.Rotation); float sinR = (float)Math.Sin(texSrt.Rotation); float scalingXC = scaling.X * cosR; float scalingXS = scaling.X * sinR; float scalingYC = scaling.Y * cosR; float scalingYS = scaling.Y * sinR; switch (texSrt.Mode) { default: case BfresLibrary.TexSrtMode.ModeMaya: return(new float[8] { scalingXC, -scalingYS, scalingXS, scalingYC, -0.5f * (scalingXC + scalingXS - scaling.X) - scaling.X * translate.X, -0.5f * (scalingYC - scalingYS + scaling.Y) + scaling.Y * translate.Y + 1.0f, 0.0f, 0.0f, }); case BfresLibrary.TexSrtMode.Mode3dsMax: return(new float[8] { scalingXC, -scalingYS, scalingXS, scalingYC, -scalingXC * (translate.X + 0.5f) + scalingXS * (translate.Y - 0.5f) + 0.5f, scalingYS *(translate.X + 0.5f) + scalingYC * (translate.Y - 0.5f) + 0.5f, 0.0f, 0.0f }); case BfresLibrary.TexSrtMode.ModeSoftimage: return(new float[8] { scalingXC, scalingYS, -scalingXS, scalingYC, scalingXS - scalingXC * translate.X - scalingXS * translate.Y, -scalingYC - scalingYS * translate.X + scalingYC * translate.Y + 1.0f, 0.0f, 0.0f, }); } }