Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 13(33)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3

Библиографическое описание:
Абдуллин Т.Р. РИСОВАНИЕ В OPENGL НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ C# // Студенческий: электрон. научн. журн. 2018. № 13(33). URL: https://sibac.info/journal/student/33/114696 (дата обращения: 23.09.2024).

РИСОВАНИЕ В OPENGL НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ C#

Абдуллин Тимур Рамилевич

студент, кафедра ИС НЧИ КФУ,

РФ, г. Набережные Челны

Компьютерная графика является достаточно интересной темой для обсуждения. Она используется абсолютно во всех современных приложениях. Также нельзя забывать об игровой индустрии, визуальная часть которой является несущей «балкой» всего производства. Люди бы просто не стали играть в игры, в которых нет красивой графики.

Есть множество библиотек, которые предназначены для работы с графикой, однако одной из самых популярных является и остается библиотека OpenGl. Библиотека существует достаточно давно, но все еще не потеряла актуальности. Вы можете не только рисовать, но и создавать собственные видеодвижки для игр. Также библиотека идеально подойдет для визуализации всевозможных математических алгоритмов. Далее будет рассматриваться работа с библиотекой OpenGl в языке программирования С# (но весь код достаточно просто можно перенести и в C++) и в среде разработки Visual Studio Community 2017.

С чего же начать изучение данной библиотеки? Для начала потребуется установить Tao Framework. Tao Framework — это библиотека, предоставляющая разработчикам .NET и Mono доступ к возможностям популярных библиотек вроде OpenGL и SDL Скачать сам фреймворк можно с официального сайта. После установки можно переходить к подключению библиотек. Необходимо будет зайти в папку с установленным Tao и найдите файл freeglut.dll, после чего перенесите данный файл в папку «Windows». Если пропустить данный шаг, то вы просто не сможете писать код с использованием функций OpenGl.

Следующим шагом является создание первого проекта с использованием OpenGl. Так как это наш первый опыт работы с компьютерной графикой, то стоит остановиться на 2D рисовании. Полученных знаний будет достаточно для написания полноценного платформера, которые просто очень сильно распространены на данный момент. Для начала, нужно будет запустить Visual Studio и создать обыкновенной WinFroms приложение. После того, как проект будет создан, нужно будет перейти в окно редактирования кода основной формы. Мы не будем углубляться в ООП, весь код будет содержаться в том же файле, где и содержится код формы. Теперь необходимо подключить следующие библиотеки: OpenGl, Platform.Windows и FreeGlut. Все эти библиотеки потребуются для рисования наших объектов.

После импорта библиотеки (или же пространства имен) Platform.Windows мы сможем использовать элемент интерфейса «SimpleOpenGlControl», который представляет собой обыкновенный черный квадрат. Именно на нем мы и будем рисовать.

Подключив все требуемые элементы интерфейса и всех необходимых библиотек, можно переходить непосредственно к программированию. Нарисуем наше первое изображение. Результатом нашей работы будет картинка со звездным небом на черном фоне. Звезды будут располагаться случайным образом. Также мы сможем задать случайный размер каждой звездочки или же сделать так, чтобы звезды занимали только один определенный сектор небо (или же нашего холста для рисования).

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

Шаг 1 – Инициализация.

Все начинается с инициализации нашего графического элемента и инициализации OpenGl.  Для начала, нужно будет создать событие Form.Load (В C# события сигнализируют системе о том, что произошло определенное действие, создавая механизм обратных вызовов в программе).

После создания события загрузки формы можно переходить к коду. Во – первых, нужно изменить конструктор формы (в нашем случае форма называется FormMain, по умолчанию – Form1), добавив инициализацию графического элемента OpenGl (наш графический элемент именован как Canva). После этого можно переходить к описанию события загрузки формы. Весь требуемый код представлен на следующих скриншотах:

 

Рисунок 1. Конструктор формы

 

Рисунок 2. Событие загрузки формы

 

Далее будут написаны отдельные методы, которые будут отвечать за отрисовку отдельных объектов финальной картинки (за отрисовку звезд будет отвечать одна функция, за отрисовку луны – другая и так далее). Объединение всех функций в одну и можно будет назвать как «drawScene». Также можно создать отдельный класс, который будет хранить все написанные функции.

Шаг 2 – Рисование звезды.

Теперь можно переходить к рисованию. Для этого создайте отдельную функцию (мы назвали ее DrawStar, что достаточно логично). Данная функция будет принимать 5 параметров, а именно: координату по оси X, координату по оси Y, ширину и высоту нашего поля для рисования и коэффициент масштабирования, который будет требоваться для изменения размера звезды. Код самой функции рисования звезды представлен далее:

 

Рисунок 3. Функция рисования звезды DrawStar(…)

 

Перейдем к более подробному рассмотрению кода. Коэффициент масштабирования отвечает за размер звезды. Использование этого коэффициента позволяет сделать функцию более универсальной и разнообразить картину звездного неба. Использование относительного задания координат позволяет получать пропорциональную картинку при любых размерах холста (для этого и используются переменный parMX и parMY). Далее идет определение цвета звезды. Цифрами 255, 255, 0 задается желтый цвет. Это универсальное обозначение цвета в RGB (Red Green Blue) формате. Также цвет можно задать в формате float. Для этого достаточно добавить букву f после указания цифры (1f, 1f, 1f). При использовании формата с плавающей точки цифры могут варьироваться только от 0 до 1, а каждая цифра отвечает за свой цвет, также как и в формате RGB.

После задания цвета идет часть с самим рисованием. GlBegin и End задают границы рисования, а Vertex2D используется для непосредственной отрисовки полигонов по координатам X и Y. Также можно изменить стиль рисования. Для получения более подробной информации можно обратиться к документации.

Шаг 3 – Отрисовка звездного неба

После того, как мы дописали функцию рисования одной звезды, можно переходить к написанию функции, которая будет выводить на небо огромное количество звезд. Мы назвали эту функцию drawStarSky(). Код данной функции представлен далее:

 

Рисунок 4. Рисование звездного неба

 

В нашем случае рисуется сразу 100 звезд, но это число можно изменить. Для этого нужно просто изменить параметр цикла. Звезды рисуются на случайных координатах поля для отрисовки (координаты следует ограничить каким – либо промежутком, так как они могут отрисовываться за его границами).

Шаг 4 – Завершение картины.

После проделанной работы остается написать функцию drawScene(), которая будет содержать функцию, отвечающую за отрисовку звездного неба. Также можно добавить дополнительные параметры, которые будут отвечать за цвет каждой звезды и ее конкретное местоположение.

 

Список литературы:

  1. Полное руководство по языку программирования С# 7.0 и платформе .NET 4.7 [Электронный ресурс]. – Режим доступа: https://metanit.com/sharp/tutorial(дата обращения: 17.04.18)
  2. Уроки по OpenGL [Электронный ресурс]. – Режим доступа: https://opengl-tutorial.blogspot.com/p/blog-page.html (дата обращения: 18.04.18)

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.