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


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


Листинг 33.1. Код выше и в теле метода Form1_Load.

//Начало координат:

private const double x_focus = 0;

private const double y_focus = 0;

private const double z_focus = 0;

//Сферические координаты глаза наблюдателя (точки E):

private float r_Eye;

private float phi_Eye;

private float theta_Eye;

//Переменные и матрица (как массив) MatrixProjection:

//(во всех массивах нулевые индексы не используем):

private const double pi = Math.PI;

private int Tetrahedron;

private int Cube;

private int Octahedron;

private int Dodecahedron;

private int Icosahedron_first;

private int Icosahedron_last;

private float[,] MatrixProjection = new float[5, 5];

//Для параллельного проецирования объекта на экран

//(parallel projection) задаем константу:

private const int ParallelProjection = 0;

//Для перспективного проецирования объекта на экран

//(perspective projection) задаем константу:

private const int PerspectiveProjection = 1;

private void Form1_Load(object sender, EventArgs e)

{

    //Задаем координаты глаза наблюдателя, например:

    r_Eye = 4;

    phi_Eye = (float)(0.05 * pi);

    theta_Eye = (float)(0.3 * pi);

    //Вызываем метод для перспективного проецирования,

    //когда type_of_projection = PerspectiveProjection

    //(для параллельного проецирования вместо

    //PerspectiveProjection пишем ParallelProjection):

    Projection(ref MatrixProjection, PerspectiveProjection,

    r_Eye, phi_Eye, theta_Eye,

    (float)x_focus, (float)y_focus, (float)z_focus, 0, 1, 0);

    //Рассчитываем параметры геометрического тела:

    СalculateParameters();

    //Связываем элемент PictureBox1 с классом Bitmap:

    pictureBox1.Image = new Bitmap(pictureBox1.Width,

                                   pictureBox1.Height);

    //Проектируем и в PictureBox рисуем выбранное нами тело:

    Designing((Bitmap)pictureBox1.Image);

}

 

Чтобы мы могли управлять (например, вращать) объектами при помощи нажатия клавиш, желательно в панели Properties на вкладке Events выбрать событие ProcessCmdKey. Если в версии VS, которая имеется у читателя, отсутствует событие ProcessCmdKey или имя этого события скрыто, то необходимо полностью записать нижеследующий метод вместе с шаблоном (или скопировать весь метод из прилагаемого к книге диска).




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



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