Топ питань
Часова шкала
Чат
Перспективи
Java OpenGL
З Вікіпедії, вільної енциклопедії
Remove ads
Java OpenGL (JOGL) — бібліотека-обгортка, що дозволяє використовувати OpenGL у мові програмування Java[1][2]. Спочатку над нею працювали Кеннет Бредлі Рассел та Крістофер Джон Клайн, потім — Game Technology Group у Sun Microsystems. З 2010 року проєкт розповсюджується за ліцензією BSD. Це реалізація Java Bindings for OpenGL (JSR-231).
JOGL надає доступ до більшості функціоналу OpenGL, доступного у програмах мовою C за допомогою Java Native Interface (JNI). Ця бібліотека запроваджує як стандартні функції GL*, так і функції GLU*; однак бібліотека OpenGL Utility Toolkit (GLUT) недоступна для викликів, пов'язаних із віконною системою, бо Java використовує власні: Abstract Window Toolkit (AWT), Swing, та певні розширення.
Remove ads
Дизайн
До базових API на C для OpenGL, та пов'язаного Windowing API[3] у JOGL можна отримати доступ за допомогою викликів до Java Native Interface (JNI). Тобто, для роботи JOGL система має підтримувати OpenGL.
JOGL відрізняється від інших обгорткових бібліотек Java OpenGL тим, що лише пропонує роботу з процедурним API OpenGL за допомогою методів у кількох класах, а не намагається перенести функціонал OpenGL на парадигму ООП. Більшість коду JOGL автоматично згенеровано на базі заголовних файлів C для OpenGL за допомогою інструмента конверсії GlueGen, спеціально створеного для розробки JOGL.
Статус і стандартизація
Станом на 2015, JOGL пропонує повноцінний доступ до OpenGL 4.5, а також до майже всіх його розширень (та OpenCL, OpenMAX і OpenAL).[4] Версія 1.1.0 є імплементацією JSR-231 (Java Bindings for OpenGL).[5] Версія 1.1.1 дала обмежений доступ до GLU NURBS, що дозволило візуалізувати криві та поверхні за допомогою традиційних API GLU. Версія 2.3.2 додала підтримку версій OpenGL включно до 4.5, та версій OpenGL ES включно до 3.2.
У майбутньому планується підтримка Wayland та Vulkan[6].
Сумісність Java2D-OpenGL
Починаючи з версії Java SE 6 мови Java, Java2D (API для малювання двовимірної графіки в Java) і JOGL стали сумісними, що дозволяє:
- Накладати компоненти Swing (легкі меню, спливаючі підказки та інші віджети) поверх візуалізації OpenGL[7].
- Створювати 3D-графіку OpenGL поверх візуалізації Java2D (приклад кнопки зі значком OpenGL).
- Використовувати 3D-графіку будь-де, де зазвичай використовується віджет Swing. (Всередині JTable, JTree, ...)
- Створювати графіку Java2D поверх тривимірної візуалізації OpenGL.
Інструкції
- Зразок OpenGL ES 2
- Hello Triangle, gl3 і gl4 Hello Triangle і Texture. Зразки пропонуються на Java та Kotlin
- Java OpenGL Sample Pack, портування g-truc OpenGL Sample Pack. Понад 230 зразків ілюструють майже всі функції OpenGL, починаючи з ES 2.0 і закінчуючи останніми розширеннями GL, ті самі з них зазвичай називаються AZDO (Almost Zero Driver Overhead).
- modern jogl examples, Портування Learning Modern 3D Graphics Programming, Jason L. McKesson [Архівовано 2016-09-23 у Wayback Machine.]. Приклади на Java і Kotlin поруч.
- Зразок Immediate mode (найпростіший приклад із використанням графічного конвеєра з фіксованою функцією)
Приклади коду
@Override
public void display(GLAutoDrawable drawable) {
GL4 gl4 = drawable.getGL().getGL4();
gl4.glClearBufferfv(GL2ES3.GL_COLOR, 0, clearColor);
gl4.glClearBufferfv(GL2ES3.GL_DEPTH, 0, clearDepth);
{
FloatUtil.makeLookAt(view, 0, eye, 0, at, 0, up, 0, tmp);
FloatUtil.makePerspective(projection, 0, reset, 45f, aspect, near, far);
FloatUtil.multMatrix(projection, view); // projection *= view
transformPointer.asFloatBuffer().put(projection);
}
gl4.glUseProgram(programName);
gl4.glBindVertexArray(vertexArrayName.get(0));
gl4.glBindBufferBase(GL2ES3.GL_UNIFORM_BUFFER /*target*/, 1 /*TRANSFORM0, index*/, bufferName.get(2) /*TRANSFORM, buffer*/);
gl4.glBindTextureUnit(0 /*diffuse*/, textureName.get(0));
gl4.glBindSampler(0 /*diffuse*/, samplerName.get(0));
gl4.glDrawElements(GL.GL_TRIANGLES, elementCount, GL.GL_UNSIGNED_SHORT, 0);
}
Див. також
Примітки
Посилання
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads