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


         

для перспективной проекции вдоль оси


               (x2 * bmp.Width / 4) + bmp.Width / 2.0F,
               bmp.Height / 2.0F - (y2 * bmp.Height / 4));
    }
    //Высвобождаем ресурсы от объектов g и pen:
    g.Dispose(); pen.Dispose();
}
//Строим единичную матрицу:
public void MatrixIdentity(ref float[,] M)
{
    for (int i = 1; i <= 4; i++)
    {
        for (int j = 1; j <= 4; j++)
        {
            if (i == j) M[i, j] = 1;
            else M[i, j] = 0;
        }
    }
}
//Строим матрицу преобразования (3-D transformation matrix)
// для перспективной проекции вдоль оси z на плоскость x,y 
//с центром объекта (фокусом) в начале координат
//и c центром проецирования на расстоянии (0, 0, Distance):
public void MatrixPerspectiveXZ(ref float[,] M,
float Distance)
{
    MatrixIdentity(ref M);
    if (Distance != 0) M[3, 4] = -1 / Distance;
}
//Строим матрицу преобразования (3-D transformation matrix)
//для проецирования с координатами:   
//центр проецирования (cx, cy, cz), фокус (fx, fy, fx),
//вектор от объекта до экрана UP <ux, yx, uz>,
//тип проецирования (type_of_projection):
//PerspectiveProjection или ParallelProjection:
public void MatrixTransformation(ref float[,] M,
int type_of_projection,
float Cx, float Cy, float Cz,
float Fx, float Fy, float Fz,
float ux, float uy, float uz)
{
    float[,] M1 = new float[5, 5];
    float[,] M2 = new float[5, 5];
    float[,] M3 = new float[5, 5];
    float[,] M4 = new float[5, 5];
    float[,] M5 = new float[5, 5];
    float[,] M12 = new float[5, 5];
    float[,] M34 = new float[5, 5];
    float[,] M1234 = new float[5, 5];
    float sin1 = 0, cos1 = 0; float sin2 = 0, cos2 = 0;
    float sin3, cos3; float A, B, C; float d1, d2, d3;
    float[] up1 = new float[5]; float[] up2 = new float[5];
    //Переносим фокус (центр объекта) в начало координат:
    MatrixTranslate(ref M1, -Fx, -Fy, -Fz);
    A = Cx - Fx; B = Cy - Fy; C = Cz - Fz;
    d1 = (float)Math.Sqrt(A * A + C * C);
    if (d1 != 0)

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