JOGL - API для базового шаблона
Используя программирование JOGL, можно рисовать различные графические формы, такие как прямые линии, треугольники, трехмерные формы, включая специальные эффекты, такие как вращение, освещение, цвета и т. Д. Чтобы рисовать объекты в JOGL, прежде всего, мы должны построить базовую рамку JOGL. . Ниже приведены классы, необходимые для создания базового каркаса.
Интерфейс GLEventListener
Чтобы ваша программа могла использовать графический API JOGL, вам необходимо реализовать GLEventListenerинтерфейс. Вы можете найтиGLEventListener интерфейс в javax.media.opengl пакет.
В следующей таблице приведены подробные сведения о различных методах и описание GLEventListener интерфейс -
Sr.No. | Методы и описания |
---|---|
1 | Void display(GLAutoDrawable drawable) Он вызывается объектом интерфейса GLAutoDrawable, чтобы инициировать рендеринг OpenGL клиентом. т.е. этот метод содержит логику, используемую для рисования графических элементов с использованием OpenGL API. |
2 | Void dispose(GLAutoDrawable drawable) Этот метод сигнализирует слушателю о необходимости освободить все ресурсы OpenGL для каждого GLContext, такие как буферы памяти и программы GLSL. |
3 | Void init(GLAutoDrawble drawable) Он вызывается объектом интерфейса GLAutoDrawable сразу после инициализации контекста OpenGL. |
4 | Void reshape(GLAutoDrawble drawble, int x, int y, int width, int height) Он вызывается объектом интерфейса GLAutoDrawable во время первой перерисовки после изменения размера компонента. Он также вызывается всякий раз, когда изменяется положение компонента в окне. |
Все методы GLEventListener требовать объект GLAutoDrawable интерфейс как параметр.
Интерфейс GLAutoDrawable
Этот интерфейс предоставляет механизм на основе событий (GLEventListener) для выполнения рендеринга OpenGL. GLAutoDrawable автоматически создает первичный контекст рендеринга, связанный с GLAutoDrawable на время жизни объекта.
В следующей таблице приведены подробные сведения о различных методах и описание GLAutoDrawable интерфейс -
Старший Нет | Методы и описания |
---|---|
1 | GL getGL() Возвращает объект конвейера GL, который используется текущим объектом интерфейса GLAutoDrawable. |
2 | void addGLEventListener(GLEventListener Listener) Добавляет заданного слушателя в конец текущей очереди с возможностью рисования. |
3 | void addGLEventListener(int index, GLEventListener listener) Добавляет заданного слушателя по заданному индексу этой очереди с возможностью рисования. |
4 | void destroy() Destroys все ресурсы, связанные с этим объектом интерфейса GLAutoDrawable, включая GLContext. |
Note- В этом пакете есть и другие методы. В этом интерфейсе обсуждаются только несколько важных методов, относящихся к шаблону.
Класс GLCanvas
GLCanvas и GLJpanel это два основных класса графического интерфейса пользователя JOGL, которые реализуют GLAutoDrawable интерфейс, который можно использовать в качестве поверхностей рисования для команд OpenGL.
GLCanvas - это тяжелый компонент AWT, который обеспечивает поддержку рендеринга OpenGL. Это основная реализацияAWTAutoGLDrawableинтерфейс. Он также наследуетjava.awt.Canvasкласс. Поскольку это тяжелый компонент, в некоторых случаяхGLJCanvasможет неправильно интегрироваться с компонентом качания. Поэтому следует соблюдать осторожность при его использовании с Swing. Всякий раз, когда вы сталкиваетесь с проблемамиGLJCanvas, тогда вы должны использовать GLJPanel класс.
Иерархическая диаграмма класса GLCanvas может быть как показано ниже -
GLEventistener интерфейс работает вместе с GLCanvasкласс. Он реагирует на изменения вGLCanvas классу и сделанным ими запросам на рисование.
Всякий раз, когда GLCanvas создается экземпляр, init() метод GLEventListenerвызывается. Вы можете переопределить этот метод, чтобы инициализировать состояние OpenGL.
Всякий раз, когда GLCanvas рисуется изначально (создается экземпляр) или изменяется размер, reshape() метод GLEventListenerвыполняется. Он используется для инициализации окна просмотра и матрицы проекции OpenGL. Он также вызывается всякий раз, когда изменяется расположение компонента.
Метод display () для GLEventListenerсодержит код для рендеринга 3D-сцены. Он вызывается всякий раз, когда метод display ()GLCanvas вызывается.
Ниже приведены конструкторы, необходимые для создания экземпляра класса GLCanvas.
Старший Нет | Конструктор и описание |
---|---|
1 | GLCanvas() Он создает новый компонент GLCanvas с набором возможностей OpenGL по умолчанию, используя механизм выбора возможностей OpenGL по умолчанию, на устройстве экрана по умолчанию. |
2 | GLCanvas(GLCapabilitiesImmutable) Он создает новый компонент GLCanvas с запрошенным набором возможностей OpenGL, используя механизм выбора возможностей OpenGL по умолчанию на устройстве экрана по умолчанию. |
Ниже приведены методы, используемые для обработки событий класса GLCanvas.
Sr. No. | Методы и описание |
---|---|
1 | void addGLEventListener(GLEventListener listener) Добавляет заданного слушателя в конец этой очереди с возможностью рисования. |
2 | void addGLEventListener(int indexGLEventListener listener) Добавляет заданного слушателя по заданному индексу этой очереди с возможностью рисования. |
Чтобы создать экземпляр GLCanvas class, вам нужен объект GLCapabilitiesImmutable интерфейс, который определяет неизменный набор возможностей OpenGL.
Один из способов получить объект CapabilitiesImmutable интерфейс должен создать экземпляр GLCapabilitiesкласс, реализующий интерфейс. ПримерGLCapabilities class можно использовать для этой цели.
Класс GLCapabilities
Этот класс определяет набор возможностей OpenGL. Он принимает в качестве параметра объект GLCapabilities. ВGLCapabilities Класс описывает желаемые возможности, которые должен поддерживать контекст визуализации, такие как профиль OpenGL.
Ниже приведен конструктор для создания экземпляра класса GLCapabilities.
Sr. No. | Методы и описание |
---|---|
1 | GLCapabilities(GLProfile glprofile) Он создает объект GLCapabilities. |
Чтобы создать экземпляр GLCanvas class вам нужен объект интерфейса GLCapabilitiesImmutable, который определяет неизменяемый набор возможностей OpenGL.
Один из способов получить объект CapabilitiesImmutable интерфейс должен создать экземпляр GLCapabilitiesкласс, реализующий интерфейс. ПримерGLCapabilities class можно использовать для этой цели.
В GLCapabilities класс, в свою очередь, требует GLProfile объект.
GLProfile Класс
Поскольку было выпущено несколько версий OpenGL API; вам необходимо указать точную версию OpenGL API, используемую в вашей программе, для вашей виртуальной машины Java (JVM). Это делается с помощьюGLProfile класс.
В get() метод этого класса принимает различные предопределенные Stringобъекты как параметры. Каждый объект String - это имя интерфейса, и каждый интерфейс поддерживает определенные версии OpenGL. Если вы инициализируете этот класс как статический и одноэлементный, он даст вам одноэлементныйGLProfile объекты для каждого доступного профиля JOGL.
Ниже приведен прототип метода get класса GLProfile.
Sr.No. | Метод и описание |
---|---|
1 | Static GLProfile get(String profile) Использует устройство по умолчанию. |
Поскольку это статический метод, вам необходимо вызвать его, используя имя класса, и для него требуется предопределенная статическая строковая переменная в качестве параметра. В этом классе 12 таких переменных, каждая представляет собой индивидуальную реализацию интерфейса GL.
GLProfile.get(GLProfile.GL2);
Параметры метода get ()
Старший Нет | Предопределенное строковое значение (имя интерфейса) и описание |
---|---|
1 | GL2 Этот интерфейс содержит все методы OpenGL [1.0… 3.0], а также большинство его расширений, определенных во время этой спецификации. |
2 | GLES1 Этот интерфейс содержит все методы OpenGL ES [1.0 ... 1.1], а также большинство его расширений, определенных во время этой спецификации. |
3 | GLES2 Этот интерфейс содержит все методы OpenGL ES 2.0, а также большинство его расширений, определенных во время этой спецификации. |
4 | GLES3 Этот интерфейс содержит все методы OpenGL ES 3.0, а также большинство его расширений, определенных во время этой спецификации. |
5 | GL2ES1 Этот интерфейс содержит общее подмножество GL2 и GLES1. |
6 | GL2ES2 Этот интерфейс содержит общее подмножество GL3, GL2 и GLES2. |
7 | GL2GL3 Этот интерфейс содержит общее подмножество ядра GL3 (OpenGL 3.1+) и GL2. |
8 | GL3 Этот интерфейс содержит все основные методы OpenGL [3.1 ... 3.3], а также большинство его расширений, определенных во время этой спецификации. |
9 | GL3bc Этот интерфейс содержит все методы совместимости OpenGL [3.1 ... 3.3] , а также большинство его расширений, определенных во время этой спецификации. |
10 | GL3ES3 Этот интерфейс содержит общее подмножество ядра GL3 (OpenGL 3.1+) и GLES3 (OpenGL ES 3.0). |
11 | GL4 Этот интерфейс содержит все основные методы OpenGL [4.0 ... 4.3] , а также большинство его расширений, определенных во время этой спецификации. |
12 | GL4bc Этот интерфейс содержит весь профиль совместимости OpenGL [4.0 ... 4.3] , а также большинство его расширений, определенных во время этой спецификации. |
13 | GL4ES3 Интерфейс, содержащий общее подмножество ядра GL4 (OpenGL 4.0+) и GLES3 (OpenGL ES 3.0). |
GLJPanel Класс
Это легкий компонент Swing, который обеспечивает поддержку рендеринга OpenGL. Это предусмотрено для совместимости с Swing.
Иерархия классов GLJPanel
На диаграмме ниже представлена иерархия классов GLJPanel.
Ниже приведены различные конструкторы класса GLJPanel.
Sr. No. | Конструкторы и описание |
---|---|
1 | GJPanel() Он создает новый компонент GLJPanel с набором возможностей OpenGL по умолчанию. |
2 | (GLCapabilitiesImmutable) Он создает новый компонент GLJPanel с запрошенным набором возможностей OpenGL. |
3 | GLJPanel(GLCapabilitiesImmutable userCapsRequest, GLCapabilitiesChooser chooser) Он создает новый компонент GLJPanel. |
Ниже приведены методы класса GLJPanel.
Sr.No. | Методы и описание |
---|---|
1 | void addGLEventListener(GLEventListener listener) Этот метод добавляет заданного слушателя в конец этой очереди с возможностью рисования. |
2 | void addGLEventListener(int indexGLEventListener listener) Этот метод добавляет заданного слушателя по заданному индексу этой очереди с возможностью рисования. |