Ошибка: Failed to parse the Currency Converter XML document.
$1 550.77


Ошибка: Failed to parse the Currency Converter XML document.
$1 634.18


Ошибка: Failed to parse the Currency Converter XML document.
$1 933.80


Использование 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();
}
}

 

Интересное

Каким станет...
Интернет самоуправляем, он ежедневно пополняется миллионами разрозненных документов. И поиск нужных сведений в таком колоссальном массиве усложняется. Именно поисковые механизмы – один из...
Подробнее...
Настройка роутера с...
В данной статье мы расскажем о настройке роутера на базе FreeBSDвыполняющего роль шлюза в инернет с установкой firewall-a, иподдерживающем статическую arp таблицу mac адресов в локальной сети.Речь...
Подробнее...
Увеличение...
Невысокая производительность и плохой доступ к информации часто вызваны неэффективностью каналов глобальной сети. Это ведет к снижению продуктивности, недовольству клиентов и несоблюдению правовых...
Подробнее...
Дюжина вопросов по...
Существуют несколько вопросов, которые изо дня в день повторяются на доске сообщений сервера ISAServer.org и в списках подписчиков. Эти же самые вопросы задают также в общих новостных лентах...
Подробнее...
Графический счётчик на PHP
Данный пример демонстрирует работу простого графического счетчика. По функциональности он совершенно идентичен текстовому счетчику.Для работы этого счетчика необходимо создать графическое...
Подробнее...
Создание заставок для...
Наверно, каждый программист на Дельфи хоть раз хотел создать к какой-нибудь своей программе заставку. Тому кто умеет работать более чем с одной формой в приложении, будет очень легко это понять....
Подробнее...
Используем Cron
Данная заметка предназначенна для тех, кто собирается работать с cron, но еще не знает как все это делается. Я в кратце попробую объяснить что такое cron, для чего он нужен да и как вообще с ним...
Подробнее...
Синхронный перевод
В современных условиях при широком общении людей, для которых родные языки не совпадают, все большую популярность приобретает синхронный перевод. Он, конечно, использовался и раньше, но...
Подробнее...
Рекламное ПО и трояны...
Трояны составили 26.65% от общего числа заражений, обнаруженных в июле ActiveScan – бесплатным онлайновым сканером от Panda Security. Принимая во внимание процент инфекций, вызванных рекламными...
Подробнее...
Основные конструкции языка...
В этой статье я расскажу о языковых конструкциях языка веб программирования php.Изучив их, Вы уже сможете писать простенькие программы.Особенностью конструкций этого языка является простота. if-...
Подробнее...