$44.29


$90.19


$30.50


Использование OpenGL в Java

Принципы реализации OpenGL в Java
В настоящее время Java очень широко распространена и все больше и больше различных технологий переносятся на этот язык. Не исключением является и OpenGL. OpenGL дополняет Java таким образом, что перспективные технологии 3D графики становятся реальностью при написании апплетов для WEB с помощью Java. OpenGL реализован в Java посредством дополнительных расширений и библиотек. Существует несколько видов этих библиотек, все они выпускаются различными небольшими компаниями. Коммерческие библиотеки я рассматривать не буду, а рассмотрю самую распространенную и самое главное бесплатную (GNU лицензия) библиотеку GL4Java (Ее можно взять по адресу http://www.jausoft.com). Кроме того, эта библиотека имеет меньше всего недостатков и вдобавок к этому существует практически под все операционные системы. Поэтому далее мы будем рассматривать именно эту библиотеку.


Хоть Java и OpenGL являются мультиплатформенными, GL4Java устанавливается на различные платформы по разному. GL4Java является связующим элементом между Java и конкретной реализацией OpenGL на данной платформе. Например в Windows OpenGL реализован через динамическую библиотеку opengl32.dll и GL4Java позволяет обращаться из Java апплетов к функциям этой библиотеки. Конечно для каждой конкретной операционной системы существуют библиотеки GL4Java, откомпилированные именно под эту операционную систему.


Но существует небольшая хитрость. Так как в Java апплетах запрещено использование локальных файлов пользователя, то возникает вопрос, каким образом программа на Java обращается к динамическим библиотекам Windows? Сделано это таким образом, что в GL4Java имеются специальные библиотеки (называемые wrapper библиотеками, т.е. находящимися между Java и OpenGL библиотеками), к которым возможно обращение из Java апплетов. Таким образом через эти библиотеки происходит уже непосредственное обращение к библиотекам OpenGL. Еще одной особенностью такой реализации является то, что скорость работы Java апплета сравнима со скоростью стандартных OpenGL программ, написанных например на C/C++, так как OpenGL команды обрабатываются не в интерпретаторе Java, а выполняются системой, обращаясь к локальным библиотекам.

2. Построение Java апплета с использованием OpenGL
Построение апплета мало чем отличается от стандартного. Рассмотрим на примере, приведенном ниже.

Класс MainApp — это основной класс апплета, наследуемый от класса Applet. Класс MainGL наследуется от специального класса GLAnimCanvas, который определен в библиотеке GL4Java. От этого класса должны наследоваться классы, которые отвечают за рисование на поверхности OpenGL апплета. GLAnimCanvas унаследован от класса GLCanvas и является его расширением, добавляя поддержку потоков для анимации. В основном большинство OpenGL апплетов используют именно этот класс.

Рассмотрим теперь, какие основные методы (которые необходимы для работы OpenGL программы) можно переопределять в своем классе и для чего они нужны.

public void preInit() — Вызывается до того как создается OpenGL контекст. Обычно используется для установки параметров OpenGL, например использование двойной буфферизации.

public void init() — Вызывается после того, как создается OpenGL контекст. Тут можно вызывать команды установки проекции OpenGL и другие команды по инициализации.

public void display() — Это метод, который вызывается для того, чтобы перерисовать содержимое на поверхности для рисования. В данном примере он вызывается автоматически, но его можно вызывать и самостоятельно. В этом методе вызываются команды OpenGL, отвечающие за рисование.

Это в принципе и все, что нужно знать. Подробную информацию, а также дополнительные методы смотрите в документации по GL4Java.

Процесс написания OpenGL программы на Java, мало чем отличается от программы на C/C++. Единственное, что хочу отметить, это то, что перед OpenGL командой надо ставить «gl.» (gl с точкой), соответственно перед командой из GLU библиотеки «glu.» и т.д.

Далее я привожу пример (скелет) апплета на Java, использующего OpenGL.

// Подключаем библиотеки GL4Java
import gl4java.GLContext;
import gl4java.awt.GLCanvas;
import gl4java.awt.GLAnimCanvas;

// Подключаем стандартные библиотеки Java
import java.awt.*;
import java.awt.event.*;
import java.lang.Math;
import java.applet.*;

// Наш основной класс GL
class MainGL extends GLAnimCanvas
{
// Конструктор
public MainGL(int w, int h)
{
super(w, h);
}

// Преинициализация
public void preInit()
{
// Устанавливаем двойную буфферизацию
doubleBuffer = true;
}

// Инициализация. Устанавливаем OpenGL проекции
public void init()
{
gl.glMatrixMode(GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho( — 5.0, 5.0, — 5.0, 5.0, 2.0, 50.0);
gl.glMatrixMode(GL_MODELVIEW);
gl.glTranslatef(0, 0, — 5);
glj.gljCheckGL();
glj.gljMakeCurrent(false);
gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
}

// Функция рисования.
public void display()
{
// Если есть какие то проблемы с OpenGL, то выходим
if (glj.gljMakeCurrent() == false) return;

// Тут идет стандартный поток OpenGL команд

gl.glClear(GL_COLOR_BUFFER_BIT);

// ... OpenGL команды ...
// Отображаем буффер на экран
// (при двойной буфферизации)
glj.gljSwap();
}
}

// Основной класс апплета
public class MainApp extends Applet
{
MainGL glmain = null;
// Инициализация апплета
public void init()
{
setLayout(null);
setSize(640,480); // Размер апплета

// Создаем наш GL объект
glmain = new MainGL(640, 480);
// Устанавливаем параметры для него
glmain.setBounds(0,0,640,480);
// И добавляем его к нашему апплету
add(glmain);
}

// Эта функция вызывается тогда,
// когда апплет стартует
public void start()
{
glmain.start();
}

// Эта функция вызывается тогда,
// когда апплет останавливается
public void stop()
{
glmain.stop();
}

// Эта функция вызывается тогда,
// когда апплет уничтожается
public void destroy()
{
glmain.stop();
glmain.cvsDispose();
}
}

 

Интересное

Стоит ли самому собирать...
Недавно в одном уважаемом компьютерном издании довелось прочитать в статью о том, как самому собрать себе компьютер. В этой статье был ряд полезных советов на тему выбора монитора, материнской...
Подробнее...
Реестр Windows
На смену ini-файлам, имеющим ряд концептуальных ограничений, еще в windows 3.1 было введено понятие реестра — регистрационной базы данных, хранящей различные настройки ОС и приложений. Изначально...
Подробнее...
Тестирование настроек...
Можно смело предположить, что нет таких пользователей, которые были бы полностью довольны производительностью своих dial-up соединений в Интернет. Приходится долго ждать загрузки web-страниц,...
Подробнее...
«Резиновая вёрстка»:...
Я недавно столкнулся с задачей, в которой надо было создать двухколоночный макет страницы с «шапкой» и «подвалом», причём в коде страницы контент должен был быть расположен перед блоком...
Подробнее...
Выпуск iPad Mini – роковая...
Первые слухи о намерениях корпорации Apple выпустить новый компактный планшет, цена которого будет составлять не более $299, по всей видимости, становятся вполне настойчивыми, чтобы применить к...
Подробнее...
Оптимизация проекта в Delphi
Здравствуйте, программисты-делфисты. Повидал я не мало многих программ написанных на делфи. Есть хорошие, есть не очень, но их размер меня всегда поражал. 0.6, 1, 5 и даже 10 мегабайт!!! А...
Подробнее...
Использование OpenGL в Java
Принципы реализации OpenGL в JavaВ настоящее время Java очень широко распространена и все больше и больше различных технологий переносятся на этот язык. Не исключением является и OpenGL. OpenGL...
Подробнее...
Протоколы интернет
Прародителем сети интернет была сеть ARPANET. Первоначально её разработка финансировалась Управлением перспективного планирования (Advanced Research Projects Agency, или ARPA). Проект стартовал...
Подробнее...
Общая информация по XP
1.1. Что такое WindowsXP? Это новая OC от компании Microsoft, в которой сделана попытка объединить две, ранее существовавшие независимо, линейки W9x и NT. Первоначально этот проект назывался...
Подробнее...
Delphi и Flash. Совмещение...
Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается!!! И сейчас я вам расскажу об этом....
Подробнее...