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

  • ТЕМА ЛАБОРАТОРНОЙ РАБОТЫ «Подключение графической библиотеки OpenGL»

  • Введение Задача

  • Цель работы

  • Описание используемой среды программирования

  • Описание метода решения задачи

  • Наиболее важные моменты листинга программы

  • Функциональные возможности разработанного приложения

  • Комп. графика лр№3. Лабораторная работа №3. Факультет систем управления Кафедра асу тема лабораторной работы Подключение графической библиотеки OpenGL Отчет о выполнении лабораторной работы 3 по дисциплине "Компьютерная графика"


    Скачать 50.44 Kb.
    НазваниеФакультет систем управления Кафедра асу тема лабораторной работы Подключение графической библиотеки OpenGL Отчет о выполнении лабораторной работы 3 по дисциплине "Компьютерная графика"
    АнкорКомп. графика лр№3
    Дата21.07.2022
    Размер50.44 Kb.
    Формат файлаdocx
    Имя файлаЛабораторная работа №3.docx
    ТипОтчет
    #634447

    Министерство образования и науки Российской Федерации

    Федеральное государственное бюджетное образовательное

    учреждение высшего профессионального образования
    ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

    СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

    Факультет систем управления

    Кафедра АСУ

    ТЕМА ЛАБОРАТОРНОЙ РАБОТЫ

    «Подключение графической библиотеки OpenGL»

    Отчет о выполнении лабораторной работы №3

    по дисциплине "Компьютерная графика"

    Работу выполнил

    2022

    Содержание

    1. Введение

    2. Описание используемой среды программирования

    3. Описание метода решения задачи

    4. Наиболее важные моменты листинга программы

    5. Функциональные возможности разработанного приложения

    6. Заключение

    7. Приложение №1

    8. Приложение №2


    Введение

    Задача: Создать в окне трехмерную сцену, состоящую из двух пятиугольных пирамид, соединенных основаниями. Все грани пирамид окрасить в различные цвета. Вращать объекты по таймеру или с помощью клавиш управления курсором.

    Цель работы: получить навыки моделирования двумерных объектов OpenGL.

    Описание исходных данных: OpenGL является одним из самых популярных прикладных программных интерфейсов (API – Application Programming Interface) для разработки приложений в области двумерной и трехмерной графики.

    Стандарт OpenGL (Open Graphics Library – открытая графическая библиотека) был разработан и утвержден в 1992 году ведущими фирмами в области разработки программного обеспечения как эффективный аппаратно-независимый интерфейс, пригодный для реализации на различных платформах. Основой стандарта стала библиотека IRIS GL, разработанная фирмой Silicon Graphics Inc.

    Библиотека насчитывает около 120 различных команд, которые программист использует для задания объектов и операций, необходимых для написания интерактивных графических приложений.

    На сегодняшний день графическая система OpenGL поддерживается большинством производителей аппаратных и программных платформ. Эта система доступна тем, кто работает в среде Windows, пользователям компьютеров Apple. Свободно распространяемые коды системы Mesa (пакет API на базе OpenGL) можно компилировать в большинстве операционных систем, в том числе в Linux.

    Характерными особенностями OpenGL, которые обеспечили распространение и развитие этого графического стандарта, являются:

    • Стабильность. Дополнения и изменения в стандарте реализуются таким образом, чтобы сохранить совместимость с разработанным ранее программным обеспечением.

    • Надежность и переносимость. Приложения, использующие OpenGL, гарантируют одинаковый визуальный результат вне зависимости от типа используемой операционной системы и организации отображения информации. Кроме того, эти приложения могут выполняться как на персональных компьютерах, так и на рабочих станциях и суперкомпьютерах.

    • Легкость применения. Стандарт OpenGL имеет продуманную структуру и интуитивно понятный интерфейс, что позволяет с меньшими затратами создавать эффективные приложения, содержащие меньше строк кода, чем с использованием других графических библиотек. Необходимые функции для обеспечения совместимости с различным оборудованием реализованы на уровне библиотеки и значительно упрощают разработку приложений.

    Наличие хорошего базового пакета для работы с трехмерными приложениями упрощает понимание ключевых тем курса компьютерной графики – моделирование трехмерных объектов, закрашивание, текстурирование, анимацию и т.д. Широкие функциональные возможности OpenGL служат хорошим фундаментом для изложения теоретических и практических аспектов предмета.

    Описание используемой среды программирования

    Для выполнения поставленной задачи мной выбрана среда программирования microsoft visual studio 2013, язык программирования C#, с применением windows forms (интерфейс программирования приложений (API), отвечающий за графический интерфейс пользователя и являющийся частью Microsoft.NET Framework). Библиотека OpenGl для .Net технологий.

    Описание метода решения задачи
          1. Для работы с OpenGl подключаем три библиотеки: Tao.Opengl.dll, Tao.FreeGlut.dll и Tao.Platform.Windows.dll. Создаем элементы интерфейса, а именно: SimpleOpenGlControl – в нем будем отображать трехмерные изображения согласно заданию, button - одна для выхода из программы, вторая для визуализации фигур. При помощи библиотеки OpenGL рисуем две неправильные пятиугольные пирамиды. Вращение фигур будет осуществляться по таймеру с задержкой 100мс.


    Наиболее важные моменты листинга программы

    private void DrawTriangles(int color, float X1, float Y1, float Z1, float X2, float Y2, float Z2)

    {

    float r = 0; float g = 0; float b = 0;

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

    if (color == 1) { r = 1; g = 0; b = 0; }

    if (color == 2) { r = 0; g = 1; b = 0; }

    if (color == 3) { r = 0; g = 0; b = 1; }

    if (color == 4) { r = 1; g = 1; b = 0; }

    if (color == 5) { r = 0; g = 1; b = 1; }
    Gl.glBegin(Gl.GL_TRIANGLES); // Начало рисования треугольника
    Gl.glColor3f(r, g, b); // задаем цвет
    Gl.glVertex3f(0.0f, 0.8f, 0.0f); // Верх треугольника

    Gl.glVertex3f(X1, Y1, Z1); // Левая точка

    Gl.glVertex3f(X2, Y2, Z2); // Правая точка

    Gl.glEnd();//конец рисования треугольника

    }

    Данный метод рисует квадрат с выбранным цветом и заданными координатами левой и правой точки. Верхняя точка одинакова для всех треугольников одной пирамиды.

    Функциональные возможности разработанного приложения

    Данное приложение выполняет построение двух неправильных пятиугольных пирамид, соединенных основанием, из двумерных примитивов. По таймеру происходит вращение фигур по оси Y.

    Заключение

    Технология OpenGL эффективно сочетается со всеми визуальными языками программирования, хотя для ее применения сейчас имеется недостаточно хорошей документации. Точнее, почти вся документация хорошо иллюстрирует версии 1 и 2 спецификации, когда уже есть версия 4.3. Причина в том, что программист, использующий эту технологию, должен уметь неплохо разбираться в алгебре и геометрии, уверенно оперировать понятиями трехмерной графики. Технология изначально была настроена на работе с примитивами: точками, отрезками, треугольниками и т.д., а также использовала довольно сложные понятия отображаемых массивов, работы с очередями буферов, камерами и координатной сеткой. Чтобы упростить все это, были созданы библиотеки-интеграторы (типа SLUT), которые позволяют использовать графику на более высоком уровне. Результаты можно видеть, например, во многих реализациях «игровых» компиляторов Бейсика, где построение трехмерного мира становится довольно простой задачей.

    В настоящее время OpenGL используется не только для написания программ с динамичной графикой, но и часто для портирования и адаптирования старых игр под Windows. Обучаться технологии можно с любой версии спецификации, так как они обратно совместимы.

    Приложение №1

    Полный листинг программы:

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Windows.Forms;
    using Tao.FreeGlut;

    using Tao.OpenGl;

    using Tao.Platform;
    namespace lab3

    {

    public partial class Form1 : Form

    {
    double angel;

    public Form1()

    {

    InitializeComponent();

    WinOpenGL.InitializeContexts(); //инициализация элемента вывода графики openGL

    }

    private void button2_Click(object sender, EventArgs e)

    {

    Application.Exit();

    }
    private void button1_Click(object sender, EventArgs e)

    {
    timer1.Start();

    }
    private void timer1_Tick(object sender, EventArgs e)

    {

    Draw();

    }
    private void Draw()

    {

    Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); // Очистка экрана и буфера глубины

    Gl.glEnable(Gl.GL_DEPTH_TEST);//для корректного отображения фигуры

    Gl.glLoadIdentity();// Сброс просмотра

    Gl.glTranslatef(-0.05f, 0.0f, 0.0f); // Сдвиг влево

    Gl.glRotated(45, 1, 0, 0);// поворот на 45 градусов по оси Х

    Gl.glRotated(45, 0, 0, 1);// поворот на 45 градусов по оси Z

    Gl.glRotated(angel, 0, 1, 0); // Вращение треугольника по оси Y
    //первая пирамида

    DrawTriangles(1, 0f, 0f, 0.2f, 0.15f, 0f, 0f); //1-й треугольник

    DrawTriangles(2, 0.15f, 0f, 0f, 0.1f, 0f, -0.25f); //2-й треугольник

    DrawTriangles(3, 0.1f, 0f, -0.25f, -0.1f, 0f, -0.25f); //3-й треугольник

    DrawTriangles(4, -0.1f, 0f, -0.25f, -0.15f, 0f, 0f); //4-й треугольник

    DrawTriangles(5, -0.15f, 0f, 0f, 0f, 0f, 0.2f); //5-й треугольник
    //вторая пирамида

    DrawTriangles1(1, 0f, 0f, 0.2f, 0.15f, 0f, 0f); //1-й треугольник

    DrawTriangles1(2, 0.15f, 0f, 0f, 0.1f, 0f, -0.25f); //2-й треугольник

    DrawTriangles1(3, 0.1f, 0f, -0.25f, -0.1f, 0f, -0.25f); //3-й треугольник

    DrawTriangles1(4, -0.1f, 0f, -0.25f, -0.15f, 0f, 0f); //4-й треугольник

    DrawTriangles1(5, -0.15f, 0f, 0f, 0f, 0f, 0.2f); //5-й треугольник
    Gl.glFlush(); // дожидаемся конца визуализации кадра

    WinOpenGL.Invalidate(); // посылаем сигнал перерисовки элемента WinOpenGL

    angel += 5; //увеличение угла поворота

    }
    private void DrawTriangles(int color, float X1, float Y1, float Z1, float X2, float Y2, float Z2)

    {

    float r = 0; float g = 0; float b = 0;

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

    if (color == 1) { r = 1; g = 0; b = 0; }

    if (color == 2) { r = 0; g = 1; b = 0; }

    if (color == 3) { r = 0; g = 0; b = 1; }

    if (color == 4) { r = 1; g = 1; b = 0; }

    if (color == 5) { r = 0; g = 1; b = 1; }
    Gl.glBegin(Gl.GL_TRIANGLES); // Начало рисования треугольника
    Gl.glColor3f(r, g, b); // задаем цвет
    Gl.glVertex3f(0.0f, 0.8f, 0.0f); // Верх треугольника

    Gl.glVertex3f(X1, Y1, Z1); // Левая точка

    Gl.glVertex3f(X2, Y2, Z2); // Правая точка

    Gl.glEnd();//конец рисования треугольника

    }
    private void DrawTriangles1(float color, float X1, float Y1, float Z1, float X2, float Y2, float Z2)

    {

    float r = 0; float g = 0; float b = 0;

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

    if (color == 1) { r = 0; g = 0.5f; b = 1; }

    if (color == 2) { r = 1; g = 0.5f; b = 0; }

    if (color == 3) { r = 0.1f; g = 0.1f; b = 0.2f; }

    if (color == 4) { r = 0.3f; g = 0.5f; b = 0.3f; }

    if (color == 5) { r = 0.4f; g = 0.2f; b = 0.5f; }
    Gl.glBegin(Gl.GL_TRIANGLES); // Начало рисования треугольника
    Gl.glColor3f(r, g, b); // задаем цвет
    Gl.glVertex3f(0.0f, -0.8f, 0.0f); // Верх треугольника

    Gl.glVertex3f(X1, Y1, Z1); // Левая точка

    Gl.glVertex3f(X2, Y2, Z2); // Правая точка

    Gl.glEnd();//конец рисования треугольника

    }

    }

    }

    Приложение №2

    Основное окно программы:



    При нажатии на кнопку «визуализация»:



    П роисходит вращение фигур по таймеру.


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