Главная страница
Навигация по странице:

  • Контрольные вопросы 1. Порядок инициализации OpenGL в C .2. Способы визуализации 2D -примитивов в VisualC . 38ПРИЛОЖЕНИЕ

  • БИБЛИОГРАФИЧЕСКИЙ СПИСОК

  • инженерная графика. Лабораторная работа введение в opengl цель изучения темы. Изучение принципов применения библиотеки Opengl при разработке приложений в C#


    Скачать 1.39 Mb.
    НазваниеЛабораторная работа введение в opengl цель изучения темы. Изучение принципов применения библиотеки Opengl при разработке приложений в C#
    Анкоринженерная графика
    Дата02.03.2023
    Размер1.39 Mb.
    Формат файлаpdf
    Имя файла3-4. openGL_C#.pdf
    ТипЛабораторная работа
    #963891
    страница3 из 3
    1   2   3
    Самостоятельное
    задание: нарисовать график функции соответственно своему варианту.

    32
    4.4. Вывод 2D цветового треугольника
    Рассмотрим программу отрисовки двухмерного треугольника, каждой вершине которого сопоставлен отдельный цвет, умножаемый на некото- рую переменную. Цвет каждой точки внутри треугольника будет интерпо- лироваться между цветами вершин. Таким образом мы получим плавный спектр цветов в треугольнике.
    Мы внесем в код управляемые переменные, которые смогут влиять на установку цвета в определенной вершине и тем самым дадут возможность сформировать различные варианты цветового спектра.
    Создадим новый проект и реализуем в нем систему визуализации, ос- нованную на объекте SimpleOpenGLControl и подключении ссылок к биб- лиотекам Tao, как это было рассмотрено в п. 4.3. Настройки инициализа- ции OpenGL (код функции Form1_Load будут соответствовать коду, пред- ставленному в предыдущем пункте).
    Приведем еще раз код функции-обработчика события Form1_Load: private void Form1_Load(object sender, EventArgs e)
    {
    // инициализация библиотеки GLUT
    Glut.glutInit();
    // инициализация режима окна
    Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE |
    Glut.GLUT_DEPTH);
    // устанавливаем цвет очистки окна
    Gl.glClearColor(255, 255, 255, 1);
    // устанавливаем порт вывода, основываясь на размерах элемента управления AnT
    Gl.glViewport(0, 0, AnT.Width, AnT.Height);
    // устанавливаем проекционную матрицу
    Gl.glMatrixMode(Gl.GL_PROJECTION);
    // очищаем ее
    Gl.glLoadIdentity();
    // теперь необходимо корректно настроить 2D ортогональную проекцию
    // в зависимости от того, какая сторона больше,
    // мы немного варьируем конфигурацией настройки проекции if (AnT.Width <= AnT.Height)
    Glu.gluOrtho2D (0.0, 30.0, 0.0, 30.0 * (float)AnT.Height / (float)AnT.Width); else
    Glu.gluOrtho2D(0.0, 30.0 * (float)AnT.Width / (float)AnT.Height, 0.0, 30.0);
    // переходим к объектно-видовой матрице
    Gl.glMatrixMode(Gl.GL_MODELVIEW);
    }
    Помимо этого нам понадобится добавить на окно программы допол- нительные элементы управления: 3 элемента TrackBar (вы можете найти

    33
    их в Панели элементов (ToolBox) в конце самого первого свитка («Все формы Windows Forms»)) и три элемента Label: они будут находиться над элементами TrackBar и содержать названия коэффициентов, которыми бу- дут управлять данные TrackBar’ы.
    Под каждым элементом TrackBar будет находиться по одному допол- нительному элементу label для вывода текущего значения параметра, ко- торым управляет данный ползунок.
    (Сверху будут находиться элементы label1, label2, label3, а снизу
    label4, label5, label6).
    Разместите все элементы, как показано на рис.
    4.7. Для того чтобы эле- мент TrackBar стал вертикальным, необходимо в его свойствах указать пара- метр Orientation равным Vertical.
    Рис.
    4.7
    В свойствах TrackBar’ов необходимо указать диапазон значений:
    Minimum 0
    Maximum 1000
    TickFrequensy 10 (количество позиций между отметками).

    34
    Для первого TrackBar’а установите значение (Value), равное 1000, для остальных – нуль.
    Выполните двойной щелчок левой клавишей мыши по каждому
    TrackBar’у, чтобы создать функции-обработчики события перемещения пол- зунка пользователем.
    В начале класса, отвечающего за нашу форму, добавьте следующую строку (для исключения путаницы в коде разместите эту строку перед функцией Form1_Load). double a = 1, b = 0, c = 0;
    Теперь реализуем функцию, отвечающую за рисование. Назовем ее
    Draw. Эта функция будет вызываться при нажатии на кнопку «Визуализи- ровать» и при перемещении управляющих ползунков на TrackBar’ах, так как при этом будут изменяться коэффициенты a, b, c и наша сцена будет нуждаться в повторной визуализации.
    Код функции с комментариями:
    // функия Draw private void Draw()
    {
    // очищаем буфер цвета
    Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
    // активируем рисование в режиме GL_TRIANGLES, при котором три заданные
    // с помощью функции glVertex2d или glVertex3d вершины
    // будут объединяться в полигон (треугольник)
    Gl.glBegin(Gl.GL_TRIANGLES);
    // устанавливаем параметр цвета, основанный на параметрах a b c
    Gl.glColor3d(0.0 + a, 0.0 + b, 0.0 + c);
    // рисуем вершину в координатах 5,5
    Gl.glVertex2d(5.0, 5.0);
    // устанавливаем параметр цвета, основанный на параметрах с a b
    Gl.glColor3d(0.0 + c, 0.0 + a, 0.0 + b);
    // рисуем вершину в координатах 25,5
    Gl.glVertex2d(25.0, 5.0);
    // устанавливаем параметр цвета, основанный на параметрах b c a
    Gl.glColor3d(0.0 + b, 0.0 + c, 0.0 + a);
    // рисуем вершину в координатах 25,5
    Gl.glVertex2d(5.0, 25.0);
    // завершаем режим рисования примитивов
    Gl.glEnd();
    // дожидаемся завершения визуализации кадра
    Gl.glFlush();
    // обновляем изображение в элементе AnT
    AnT.Invalidate();
    }

    35
    Функции-обработчики перемещения ползунка в TrackBar’ах будут выглядеть следующим образом: private void trackBar1_Scroll(object sender, EventArgs e)
    {
    // генерация коэффициента a = (double)trackBar1.Value / 1000.0;
    // вывод значения коэффициента, управляемого данным ползунком.
    // (под TrackBar'ом) label4.Text = a.ToString();
    } private void trackBar2_Scroll(object sender, EventArgs e)
    {
    // генерация коэффициента b = (double)trackBar2.Value / 1000.0;
    // вывод значения коэффициента, управляемого данным ползунком.
    // (под TrackBar'ом) label5.Text = b.ToString();
    } private void trackBar3_Scroll(object sender, EventArgs e)
    {
    // генерация коэффициента c = (double)trackBar3.Value / 1000.0;
    // вывод значения коэффициента, управляемого данным ползунком.
    // (под TrackBar'ом) label6.Text = c.ToString();
    }
    Для корректной визуализации
    (например, в том случае, когда наше окно перекроет какое-либо другое) мы добавим в нашу форму объект − таймер. Он будет отсчи- тывать промежутки времени таким образом, чтобы примерно 40 раз в секунду перерисовывать содер- жимое нашего окна.
    Для того чтобы добавить объект, перейдите к окну ToolBox, выберите в свитке « Компоненты» элемент Timer (рис.
    4.8) и перета- щите его на форму.
    Рис.
    4.8

    36
    Место, куда вы перетащите этот элемент, не важно: он не занимает его на форме и отобразится в полоске таких же («не занимающих место») объектов под формой.
    Щелкните по нему и перейдите в его свойства.
    Смените параметр name на значение RenderTimer, а параметр Interval − на значение 25 (раз в 25 мс будет вызываться событие OnTimer).
    Теперь щелкните по нему двойным щелчком левой клавиши мыши.
    Создастся функция-обработчик события OnTimer. Отсюда мы будем вызы- вать функцию Draw: private void RenderTimer_Tick(object sender, EventArgs e)
    {
    // функция визуализации
    Draw();
    }
    Кнопка «Визуализировать» будет отвечать за активацию этого тайме- ра. Для этого будет использоваться функция Start:
    // обработчик кнопки "Визуализировать" private void button1_Click(object sender, EventArgs e)
    {
    // старт таймера, отвечающего за вызов функции,
    // визуализирующей кадр
    RenderTimer.Start();
    }
    И в заключение назначьте обработчик кнопке «Выйти»
    // обработчик кнопки "Выйти" private void button2_Click(object sender, EventArgs e)
    {
    // выход из приложения
    Application.Exit();
    }
    После компиляции и запуска программы мы сможем управлять раз- ложением спектра в треугольнике (рис.
    4.9, 4.10).

    37
    Рис.
    4.9
    Рис.
    4.10
    Контрольные вопросы
    1. Порядок инициализации OpenGL в C#.
    2. Способы визуализации 2D-примитивов в VisualC#.

    38
    ПРИЛОЖЕНИЕ
    Установка и подключение библиотек TAO
    Рассмотрим установку Tao Framework на примере версии 2.1.0.
    Установка может не начаться по причине отсутствия . NET Framework
    2.0. Однако если уже установлена MS Visual Studio 2008, то такой пробле- мы возникнуть не должно, так как она уже содержит .NET Framework 3.0, который устанавливается в ходе общей установки MS Visual Studio.
    После запуска дистрибутива появится окно подтверждения установки
    (рис. П1). Подтвердите установку и следуйте вперед, нажимая кнопку "Да- лее", чтобы подтвердить все стандартно выставленные программой опции
    (рис. П2 – П6). На шестом шаге установки (рис. П7) обязательно оставьте указанные галочки.
    Рис. П1

    39
    Рис. П2
    Рис. П3

    40
    Рис. П4
    Рис. П5

    41
    Рис. П6
    Рис. П7
    После этого шага пройдет инсталляция файлов и Tao Framework гото- ва к работе.
    Для использования библиотеки может понадобиться в настройках операционной системы в переменную среды PATH добавить каталог
    C:\Program Files\TaoFramework\lib.

    42
    БИБЛИОГРАФИЧЕСКИЙ СПИСОК
    1. Жигалов, И. Е. Компьютерная графика : курс лекций / И. Е. Жига- лов. – Владимир : Ред.-издат. комплекс ВлГУ, 2004. − 124 с.
    2. Жигалов, И. Е. Программирование компьютерной графики : практи- кум / И. Е. Жигалов ; Владим. гос. ун-т. − Владимир, 2002. − 100 с.
    3. Никулин, Е. А. Компьютерная геометрия и алгоритмы машинной графики / Е. А. Никулин. − СПб. : БХВ, 2003. – 560 с. − ISBN 5-94157-264-6.
    4. Поляков, А. Ю. Методы и алгоритмы компьютерной графики в при- мерах на Visual C++ / А. Ю. Поляков. – СПб. : БХВ-Петербург, 2002. –
    416 с. − ISBN 5-941571-36-4.
    5. Порев, В. Н. Компьютерная графика / В. Н. Порев. – СПб. : БХВ-
    Петербург, 2002. − 432 с. − ISBN 5-94157-139-9.
    6. Тарасов, И. А. Основы программирования в OрenGL / И. А. Тарасов. −
    М. : Телеком, 2000. − 188 с. − ISBN 5-935170-16-7.
    7. Эйнджел, Э. Интерактивная компьютерная графика. Вводный курс на базе OрenGL / Э. Эйнджел. – М. : Вильямс, 2001. – 592 с. − ISBN
    5-8459-0209-6.
    8. Павловская, Т. А. С#. Программирование на языке высокого уровня :
    учеб. для вузов / Т. А. Павловская. − СПб. : Питер, 2009. − 432 с. − ISBN
    978-5-91180-174-8.
    1   2   3


    написать администратору сайта