CgExamples.Gl_14_bulge.makeRotateMatrix C# (CSharp) Метод

makeRotateMatrix() статический приватный Метод

static private makeRotateMatrix ( float angle, float ax, float ay, float az, float &m ) : void
angle float
ax float
ay float
az float
m float
Результат void
        static void makeRotateMatrix(float angle,
                             float ax, float ay, float az,
                             ref float[] m)
        {
            float radians, sine, cosine, ab, bc, ca, tx, ty, tz;
            float[] axis = new float[3];
            float mag;

            axis[0] = ax;
            axis[1] = ay;
            axis[2] = az;
            mag = (float)Math.Sqrt(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]);
            if (mag != 0)
            {
                axis[0] /= mag;
                axis[1] /= mag;
                axis[2] /= mag;
            }

            radians = angle * (float)(Math.PI / 180.0);
            sine = (float)Math.Sin(radians);
            cosine = (float)Math.Cos(radians);
            ab = axis[0] * axis[1] * (1 - cosine);
            bc = axis[1] * axis[2] * (1 - cosine);
            ca = axis[2] * axis[0] * (1 - cosine);
            tx = axis[0] * axis[0];
            ty = axis[1] * axis[1];
            tz = axis[2] * axis[2];

            m[0] = tx + cosine * (1 - tx);
            m[1] = ab + axis[2] * sine;
            m[2] = ca - axis[1] * sine;
            m[3] = 0.0f;
            m[4] = ab - axis[2] * sine;
            m[5] = ty + cosine * (1 - ty);
            m[6] = bc + axis[0] * sine;
            m[7] = 0.0f;
            m[8] = ca + axis[1] * sine;
            m[9] = bc - axis[0] * sine;
            m[10] = tz + cosine * (1 - tz);
            m[11] = 0;
            m[12] = 0;
            m[13] = 0;
            m[14] = 0;
            m[15] = 1;
        }