Компьютерная графика, мультимедиа и игры на Visual C#


         

Вращаем вокруг оси x, когда


    //Вращаем вокруг оси z,
    //пока линия не окажется в y-z плоскости:
    MatrixIdentity(ref R1);
    D = (float)Math.Sqrt(d1 * d1 + d2 * d2);
    R1[1, 1] = d2 / D; R1[1, 2] = d1 / D;
    R1[2, 1] = -R1[1, 2]; R1[2, 2] = R1[1, 1];
    MatrixIdentity(ref R1i);
    R1i[1, 1] = R1[1, 1]; R1i[1, 2] = -R1[1, 2];
    R1i[2, 1] = -R1[2, 1]; R1i[2, 2] = R1[2, 2];
    // Вращаем вокруг оси x, когда линия будет по оси y:
    MatrixIdentity(ref r2);
    L = (float)Math.Sqrt(d1 * d1 + d2 * d2 + d3 * d3);
    r2[2, 2] = D / L; r2[2, 3] = -d3 / L;
    r2[3, 2] = -r2[2, 3]; r2[3, 3] = r2[2, 2];
    MatrixIdentity(ref R2i);
    R2i[2, 2] = r2[2, 2]; R2i[2, 3] = -r2[2, 3];
    R2i[3, 2] = -r2[3, 2]; R2i[3, 3] = r2[3, 3];
    //Вращаем вокруг линии (оси y):
    MatrixYRotate(ref Rot3, theta);
    //Комбинируем матрицы:
    m3MatMultiply(ref M12, ref T, ref R1);
    m3MatMultiply(ref M34, ref r2, ref Rot3);
    m3MatMultiply(ref M1234, ref M12, ref M34);
    m3MatMultiply(ref M56, ref R2i, ref R1i);
    m3MatMultiply(ref M567, ref M56, ref Ti);
    m3MatMultiply(ref M, ref M1234, ref M567);
}
//Строим матрицу преобразования (3-D transformation matrix)
//для переноса на Tx, Ty, Tz:
public void MatrixTranslate(ref float[,] M,
float Tx, float Ty, float Tz)
{
    MatrixIdentity(ref M);
    M[4, 1] = Tx; M[4, 2] = Ty; M[4, 3] = Tz;
}
//Строим матрицу преобразования (3-D transformation matrix)
//для поворота вокруг оси y (угол - в радианах):
public void MatrixYRotate(ref float[,] M, float theta)
{
    MatrixIdentity(ref M);
    M[1, 1] = (float)Math.Cos(theta);
    M[3, 3] = M[1, 1];
    M[3, 1] = (float)Math.Sin(theta);
    M[1, 3] = -M[3, 1];
}
//Применяем матрицу преобразования к точке,
//где матрица не может иметь 0, 0, 0, 1
//в последнем столбце. Нормализуем только
//x и y компоненты результата, чтобы сохранить z информацию:
public void MatrixApplyFull(ref float[] V, ref float[,] M, ref float[] Result)
{
    int i, j; float value = 0;

Содержание  Назад  Вперед