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


         

вектор от объекта до экрана


}
//Строим матрицу преобразования (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];

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