Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Статьи
        Основы
            Основы OpenGL

Основы OpenGL

Опубликованно: 19.07.2015, 21:23
Последняя редакция, AdiDOS: 28.04.2017 16:02

В этой статье я хочу рассказать о основах 3D графики(OpenGL) и терминов которые я буду использовать в дальнейших уроках.

OpenGL

Open Graphycs Lybrary (Открытая Графическая Библиотека) это открытая кроссплатформенная графическая библиотека которая поддерживается на аппаратном уровне производителями графических ускорителей(Видеокарт).

Один единственный конкурент это DirectX от Microsoft , спорить что лучше нет никакого смысла  потому что везде есть свои преимущества и недостатки но самое главное что не может DirectX это работать на других платформах в чем OpenGL в основном и выигрывает в этой войне если у вас есть телефон Android то там трудится OpenGL , iPhone тоже он, а также MacOS ,Windows, Linux и знаменитая PlayStation 3  ну видите как OpenGL крут и он достоин внимания.

И как вы думаете зачем я пишу именно про OpenGL на сайте JME да все правильно он и работает в jMonkeyEngine.

 Что нужно знать

Для понятия 3D графики вам нужно будет знать некоторые аспекты такие как Вершины,Индексация,Нормали, VBO и IBO.

Вершины

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

OpenGL на данный момент делится на 2 ветви это первая которая идет до версии 2.1 и вторая можно скачать революционная которая свыше 3.0 версии , в новой версии она радикально изменилась было очень много нововведений  хотя она и работает в режиме совместимости с старой версией.

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

1Если мы возьмем плоскость с четырьмя углами то она будет состоять из шести вершин ну а шесть потому что как я говорил что все состоит из треугольников ,  я думаю понятие вершина разъяснили идем далее.

Индексы

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

2

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

На практике делается так создается 2 массива один вершинный а второй индексный , в вершинный указываем координаты точек в нашем случае их 4 а в индексном указываем порядок индексов и видео карта делает на все повторяющие вершины одно вычисление , ниже пример ландшафта в JME.

3

 Нормали

Эта статья нуждается отдельной темы но я кратко опишу , нормали в основном нужны для вычисления источника света но и не только , нормали это вектор указывающий направление плоскости.

4 (2)

Это изображение иллюстрирует направление нормалей зеленые линии от каждой вершины указывают их направление , простыми словами куда нормали направленны та сторона и будет освещаться на сцене .

VBO и IBO

VBO (Vertex Buffer Object) — Буфер  Вершин Объекта  предназначен для загрузки данных в память видеокарты , это массивы вершин , текстурных координат, нормалей и цвета.

IBO (Index Buffer Object) — Буфер  Индексов Объекта тоже самое но для загрузки массивов индексов

Изначально начиная с 1 версии OpenGL такого понятия как VBO не было все строилось в циклах каждая вершина передавалась отдельно это очень ограничивало производительность видеокарты , ну да кто знает были еще дисплейные списки но они были эффективны только в прорисовке статических объектах.

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

JME много классов создания готовых объектов такие как куб , сфера , купол и прочие, а также мы можем подгружать объекты из внешних источниках такие как OBJ,OgreXml , но вы должны понимать что любой ваш объект хранит в себе массивы данных вершин , нормалей и прочее.

Я думаю на сегодня все.

Спасибо за внимание !!

Добавить комментарий

Содержание

jMonkeyEngine.ru © 2017. Все права сохранены.