Суббота, 18 Августа 2018, 03:46

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [309]
Статьи об общих понятиях связанных с созданием игр.
Программирование [69]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [123]
Статьи о программах для создания игр, уроки и описания.
Софт [27]
Различные программы, в том числе в помощь игроделам.
2D-графика [11]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [10]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [4]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [83]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [63]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Какой вид используется в ваших играх?
Всего ответов: 10067
Главная » Статьи » Создание игр

Создание игр на Java используя LWJGL. Часть II. Отрисовка.
[Прошлая часть]
---------

Приветствую всех. Сегодня бы я хотел продолжить цикл статьей по такой замечательной библиотеке, как LWJGL. В данном уроке я объясню вам как устроена система вывода изображения на экран, и научу вас рисовать такие простейшие примитивы, как квадраты и линии.
Итак, начнем с того что прежде, чем работать с OpenGL, его надо инициализировать. Инициализировать OpenGL мы будем прямо после try/catch блока в котором мы инициализировали окно.
Инициализируют OpenGL следующие строки кода:
Код

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,WIDTH,HEIGHT,0,1,-1);
glMatrixMode(GL_MODELVIEW);

Пока объяснять код не буду(ибо это будет непонятно), главное, понять что этот код необходим для работы с 2D плоскостью.
Теперь о самом рендеринге.
Весь рендеринг происходит между методом glClear(GL_COLOR_BUFFER_BIT) и методом Display.update().
Эти два метода отвечают за такую вещь, как двойная буферизация. Что такое двойная буферизация? Представим два буфера. Один из них будет, грубо говоря, полем для рисования, этот буфер будет называться экранным. Второй буфер - невидимый. Вначале мы очищаем невидимый буфер методом glClear(GL_COLOR_BUFFER_BIT). Когда мы вызываем метод, отвечающий за прорисовку, мы не сразу выводим это изображение на экран. Оно помещается в невидимый буфер, а затем функция Display.render() копирует содержимое того самого буфера и вставляет в экранный буфер.
Теперь немного о методах для прорисовки.
Основной метод, который позволяет нам рисовать геометрические примитивы, называется glBegin(тип_примитива). Затем примитив рисуется и после окончания прорисовки примитива ставится метод glEnd().
Чтобы рисовать примитив, нужны вершины. Вершины - точки на плоскости, образующие собственно сам примитив. Пока это может показаться непонятным, поэтому предлагаю рассмотреть на конкретном примере:
Код

glBegin(GL_LINES); //GL_LINES означает что мы собираемся рисовать линии
glVertex2i(100,100); //Указываем первую точку линии - 100;100
glVertex2i(200,200); //Указываем вторую точку линии - 200;200;
glEnd(); //Заканчиваем рисовать примитив.

Как вы заметили, за указание вершины отвечает метод glVertex2i(x,y). Цифра 2 в названии метода, означает что эта вершина находится в двухмерной плоскости, а не в трёхмерном пространстве. Буква i на конце означает тип - integer(int). Вы можете поэкспериментировать с типами, поставив вместо i(int), f или d(float или double).
Итак, рассмотрим более сложный примитив, например, квадрат. Для того чтобы рисовать квадрат, методу glBegin нужно передать значение GL_QUADS. Рисование квадрата аналогично рисованию линии просто нужно запомнить в каком порядке рисуются вершины:
Код

glBegin(GL_QUADS);
glVertex2i(200,200); //Левая верхняя точка квадрата
glVertex2i(200,250); //Правая верхняя точка квадрата
glVertex2i(250,250); //Правая нижняя точка квадрата
glVertex2i(250,200); //Левая нижняя точка квадрата
glEnd();

Данный код рисует квадрат размером 50x50, в точке (200;200).
Теперь поговорим о том, как задать цвет. Для того чтобы задать цвет примитива, понадобится функция glColor3f(float r,float g,float b). Её параметры - кол-во содержания красного, зелёного и синего цвета. Например, чтобы нарисовать красный квадрат, нам понадобится такой код:
Код

glColor3f(1,0,0); //red = 1, green = 0,blue = 0
glBegin(GL_QUADS);
glVertex2i(200,200);  
glVertex2i(200,250);  
glVertex2i(250,250);  
glVertex2i(250,200);  
glEnd();

Это всё что я хотел сказать по поводу рисования примитивов, до следующего урока.
ЗЫ стоит-ли создавать отдельный пост на форуме со статьями, дабы не засорять сайт?
Категория: Создание игр | Добавил: WhoAmI (27 Мая 2015)
Просмотров: 4172 | Комментарии: 2 | Рейтинг: 5.0/1 |
Теги: Создание игр, урок, java, Код, Дисплеи, LWJGL 2, Eclipse, Программирование, ЯП, LWJGL
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Создание игр на Java используя LWJGL. Часть II. Отрисовка.», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 2
+1-
1 Snake174   (03 Июня 2015 13:23)
Snake174"ЗЫ стоит-ли создавать отдельный пост на форуме со статьями, дабы не засорять сайт?"

И так норм.

Что планируешь в следующих частях писать?
Будет ли рассмотрено одинаковое отображение с различными разрешениями окна?

Да и лучше было бы заменить glBegin() и glEnd() на что-то более современное.
Разделяй параграфы, а то читать неудобно.

А так в целом нормально, продолжай в том же духе )

+1-
2 WhoAmI   (03 Июня 2015 16:09)
WhoAmIВ первых частях буду обучать основам LWJGL(обработка событий, рендеринг, текстуринг, шейдеринг и.т.д. и.т.п.), а затем, после достаточных знаний для работы с двухмерной плоскостью, уже начну цикл по работе с 3D.
glBegin() и glEnd() использую только в целях обучения, дабы была понятна суть.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • TyranoBuilder
  • GAGE
  • Away3D
  • ezRPG
  • Open Zelda
  • Dungeon Craft
  • Asphyre Sphinx
  • RPG Maker VX ACE
  • Multimedia Builder
  • DEngine
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2018 Рейтинг