И пришел OpenGL.
Скажу сразу, я ориентируюсь не на новичка в программировании. Как минимум, что такое динамическая диспетчеризация вы должны знать. Шучу! :) Не стоит бояться делать, что то новое. Дорогу осилит только идущий.
Ну что же, погнали
Под Java существует несколько дистрибутивов OpenGL, в частности: jogl, gl4java и lwjgl. Насколько я знаю lwjgl имеет довольно большое сообщество. Да и сам факт того, что например minecraft, spiral knights и прочие довольно успешные проекты реализованы с использование данной технологии, например для меня говорит многое.
Light weight java game library или просто lwjgl http://www.lwjgl.org/ - библиотека для языка программирования java, которая по сути из себя представляет объектную оболочку над OpenGL. Плюс набор классов для работы с оконной системой, контролерами.
Перейдем к делу. Я не буду дублировать информацию о том, как же подключить lwjgl к какой либо ide. Это задача довольно проста и на мой взгляд тот, кто не смог это сделать, не сможет самостоятельно двигаться в мире программирования. Тем более, что в вышеуказанной ссылке есть туториалы о том, как подключить эту библиотеку ко множеству сред разработки. Я представлю, что вы подключили библиотеку и начину непосредственно с создания базового программного кода. Создав проект в одной из ide (Eclipse, NetBeans или IDEA) создайте интерфейс:
Ну что же, погнали
Под Java существует несколько дистрибутивов OpenGL, в частности: jogl, gl4java и lwjgl. Насколько я знаю lwjgl имеет довольно большое сообщество. Да и сам факт того, что например minecraft, spiral knights и прочие довольно успешные проекты реализованы с использование данной технологии, например для меня говорит многое.
Light weight java game library или просто lwjgl http://www.lwjgl.org/ - библиотека для языка программирования java, которая по сути из себя представляет объектную оболочку над OpenGL. Плюс набор классов для работы с оконной системой, контролерами.
Перейдем к делу. Я не буду дублировать информацию о том, как же подключить lwjgl к какой либо ide. Это задача довольно проста и на мой взгляд тот, кто не смог это сделать, не сможет самостоятельно двигаться в мире программирования. Тем более, что в вышеуказанной ссылке есть туториалы о том, как подключить эту библиотеку ко множеству сред разработки. Я представлю, что вы подключили библиотеку и начину непосредственно с создания базового программного кода. Создав проект в одной из ide (Eclipse, NetBeans или IDEA) создайте интерфейс:
Я поясню суть каждого из методов.
Все очень просто. Давайте начнем с конца: метод getInformationAboutSysConfig при запуске нашей программы будет выводить в консоль информацию о текущей версии lwjgl, имени вашей платформы, поставщике видео аппаратуры,модели видео адаптера и текущей версии OpenGL.
Вот как это выглядит на моей машинке:
- Метод cleanup будет "уничтожать" и высвобождать ресурсы для отображения окна.
- Метод createWindow, как следует из названия будет средствами lwjgl создавать, инициализировать и параметризировать окно.
- Метод pollInput будет нашим handler"ом по "поимке" и обработке событий с клавиатуры, мыши и контроллеров.
- Метод initGL инициализирует конвейер состояний OpenGL (да, да, OpenGL это конечный автомат, ну об этом позже).
- Ну и метод run. Это то на чем следует сфокусироваться. Это то место, в котором, как в конвейере будут вызываться, создаваться и высвобождаться (я очень надеюсь, что сборщик мусора услышит меня) данные. Концепция в следующем: этот метод, вызывается каждый кадр, то есть это цикл который запускается с момента его вызова до того момента пока программа не будет завершена (ну или пока не вылетит exception :)). В англоязычной литературе OpenGL до версии 2.0 именуется как fixed function pipeline (фиксированный трубопровод). Да, до версии OpenGL 2.0 он был далеко не полностью программируемым мягко говоря, но с появлением шейдеров в этой самой версии 2.0, машина состояний OpenGL получила новое название - peogrammable pipeline (программируемый трубопровод). О шейдерах я начну чуть позже и скорее всего через пару десятков постов :) (нужен хороший background перед столь низко и одновременно высокоуровневым программированием комп графики).
- Метод pollInput будет нашим handler"ом по "поимке" и обработке событий с клавиатуры, мыши и контроллеров.
- Метод initGL инициализирует конвейер состояний OpenGL (да, да, OpenGL это конечный автомат, ну об этом позже).
- Ну и метод run. Это то на чем следует сфокусироваться. Это то место, в котором, как в конвейере будут вызываться, создаваться и высвобождаться (я очень надеюсь, что сборщик мусора услышит меня) данные. Концепция в следующем: этот метод, вызывается каждый кадр, то есть это цикл который запускается с момента его вызова до того момента пока программа не будет завершена (ну или пока не вылетит exception :)). В англоязычной литературе OpenGL до версии 2.0 именуется как fixed function pipeline (фиксированный трубопровод). Да, до версии OpenGL 2.0 он был далеко не полностью программируемым мягко говоря, но с появлением шейдеров в этой самой версии 2.0, машина состояний OpenGL получила новое название - peogrammable pipeline (программируемый трубопровод). О шейдерах я начну чуть позже и скорее всего через пару десятков постов :) (нужен хороший background перед столь низко и одновременно высокоуровневым программированием комп графики).
Давайте теперь реализуем наш интерфейс, и посмотрим что получиться на выходе:
Начнем с метода run. Пока что он ничего толком не делает. Просто крутиться себе трубопровод, пока вы не закроете программу и все. В инициализации окна (строчка 64) и машины состояний (строчка 65) вопросов возникнуть не должно, когда вы реализации всех методов увидите.
А теперь я вас попугаю чуть чуть:
Это метод initGL, инициализирующий машину состояний OpenGL. В моем проекте инициализация этой машины очень нехилая :). Содержание данного метода в данной статье концептуально не важно. Подробно каждая из функций будет рассмотрена позже. Данный пример я привел, для того, чтобы вы психологически подготовились к туче кода.
На данном этапе нам интересней всего как же создать окно средствами lwjgl.
А все просто: для начала мы импортирует класс Display, который очень простой в использовании. Имея статическую сущность мы просто обращается через класс Display к методам.
Для высвобождения ресурсов я инкапсулировал метод destroy в свой метод.
Ну и последний метод, для получения статистической информации о системе. Пока что, просто примите на веру то, что написано тут. Позже, все станет шаг за шагом проясняться.
В следующей статье, я начну подробный рассказ о функциях и концепциях заложенных в OpenGL.
Всем спасибо.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.