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


         

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


    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(n1 * n1 + n2 * n2 + n3 * n3);
    r2[2, 2] = D / L; r2[2, 3] = -n3 / 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];
    //Рисуем отражение объекта перпендикулярно x-z плоскости:
    MatrixIdentity(ref S); S[2, 2] = -1;
    //Комбинируем матрицы:
    m3MatMultiply(ref M12, ref T, ref R1);
    m3MatMultiply(ref M34, ref r2, ref S);
    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);
}
//Строим матрицу преобразования для поворота на угол theta
//вокруг линии, проходящей через (p1, p2, p3)
//в направлении <d1, d2, d3>.
//Угол theta откладывается против часовой стрелки,
//если мы смотрим вниз в направлении,
//противоположном направлению линии:
public void m3LineRotate(ref float[,] M,
float p1, float p2, float p3,
float d1, float d2, float d3, float theta)
{
    float[,] T = new float[5, 5]; //Перенос.
    float[,] R1 = new float[5, 5]; //Вращение 1.
    float[,] r2 = new float[5, 5]; //Вращение 2.
    float[,] Rot3 = new float[5, 5]; //Вращение.
    float[,] R2i = new float[5, 5]; //Стоп вращению 2.
    float[,] R1i = new float[5, 5]; //Стоп вращению 1.
    float[,] Ti = new float[5, 5]; //Стоп переносу.
    float D, L;
    float[,] M12 = new float[5, 5];
    float[,] M34 = new float[5, 5];
    float[,] M1234 = new float[5, 5];
    float[,] M56 = new float[5, 5];
    float[,] M567 = new float[5, 5];
    //Переносим плоскость к началу координат:
    MatrixTranslate(ref T, -p1, -p2, -p3);
    MatrixTranslate(ref Ti, p1, p2, p3);

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