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


Глава Изображение и управление трехмерными объектами в трехмерном пространстве - часть 10


}

//Строим матрицу преобразования (3-D transformation matrix)

//для перспективного проецирования (perspective projection):   

//центр проецирования (r, phi, theta),

//фокус (fx, fy, fx),

//вектор от объекта до экрана UP <ux, yx, uz>,

//тип проецирования (type_of_projection):

//PerspectiveProjection:

public void Projection(ref float[,] M,

int type_of_projection, float R,

float phi, float theta,

float Fx, float Fy, float Fz,

float ux, float uy, float uz)

{

    float Cx, Cy, Cz, r2;

    //Переходим к прямоугольным координатам:

    Cy = R * (float)Math.Sin(phi);

    r2 = R * (float)Math.Cos(phi);

    Cx = r2 * (float)Math.Cos(theta);

    Cz = r2 * (float)Math.Sin(theta);

    MatrixTransformation(ref M, type_of_projection,

        Cx, Cy, Cz, Fx, Fy, Fz, ux, uy, uz); //ref M

}

//Строим матрицу преобразования, чтобы получить

//отражение напротив плоскости, проходящей 

//через (p1, p2, p3) с вектором нормали <n1, n2, n3>:

public void m3Reflect(ref float[,] M,

float p1, float p2, float p3,

float n1, float n2, float n3)

{

    float[,] T = new float[5, 5]; //Перенос.

    float[,] R1 = new float[5, 5]; //Вращение 1.

    float[,] r2 = new float[5, 5]; //Вращение 2.

    float[,] S = 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);

    //Вращаем вокруг оси z,

    //пока нормаль не будет в y-z плоскости:

    MatrixIdentity(ref R1);

    D = (float)Math.Sqrt(n1 * n1 + n2 * n2);

    R1[1, 1] = n2 / D; R1[1, 2] = n1 / D;

    R1[2, 1] = -R1[1, 2]; R1[2, 2] = R1[1, 1];




Начало  Назад  Вперед



Книжный магазин