Приветствую всех. Сегодня бы я хотел продолжить цикл статьей по такой замечательной библиотеке, как LWJGL. В данном уроке я объясню вам как устроена система вывода изображения на экран, и научу вас рисовать такие простейшие примитивы, как квадраты и линии. Итак, начнем с того что прежде, чем работать с OpenGL, его надо инициализировать. Инициализировать OpenGL мы будем прямо после try/catch блока в котором мы инициализировали окно. Инициализируют OpenGL следующие строки кода:
Пока объяснять код не буду(ибо это будет непонятно), главное, понять что этот код необходим для работы с 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). Её параметры - кол-во содержания красного, зелёного и синего цвета. Например, чтобы нарисовать красный квадрат, нам понадобится такой код:
Это всё что я хотел сказать по поводу рисования примитивов, до следующего урока. ЗЫ стоит-ли создавать отдельный пост на форуме со статьями, дабы не засорять сайт?
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Создание игр на Java используя LWJGL. Часть II. Отрисовка.», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
В первых частях буду обучать основам LWJGL(обработка событий, рендеринг, текстуринг, шейдеринг и.т.д. и.т.п.), а затем, после достаточных знаний для работы с двухмерной плоскостью, уже начну цикл по работе с 3D. glBegin() и glEnd() использую только в целях обучения, дабы была понятна суть.
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]