В настоящее время Java
очень широко распространена и все больше и больше
различных технологий переносятся на этот язык. Не
исключением является и OpenGL. OpenGL дополняет Java
таким образом, что перспективные технологии 3D графики
становятся реальностью при написании апплетов для WEB с
помощью Java. OpenGL реализован в Java посредством
дополнительных расширений и библиотек. Существует
несколько видов этих библиотек, все они выпускаются
различными небольшими компаниями. Коммерческие
библиотеки я рассматривать не буду, а рассмотрю самую
распространенную и самое главное бесплатную (GNU
лицензия) библиотеку GL4Java (Ее можно взять по адресу
http://r.codenet.ru/?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;
// Функция рисования.
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();
}
}
Наверное, никто не сможет поспорить с утверждением, что главное в любой web-страничке - удобство для пользователя. После того, как мы выложили наше творение в сеть, мы сразу начинаем предпринимать массу усилий для того, чтобы привлечь на свой сайт максимум посетителей... подробнее
Этот скрипт поможет вам организовать на своем сайте или страничке баннерную систему.
Первый фрагмент вы вставляете в любое место странички... подробнее
В Internet Zone-154 была небольшая заметка Локальная баннерная система. Автор - Вадим Беляков (http://tuta.da.ru) предлагал поставить на страничку баннер, используя небольшой javascript. Я прочитал этот номер лишь в середине апреля. Мне сразу же пришло в голову использовать его для текстовой рекламы... подробнее
JS, или JavaScript язык сценариев, которые выполняются на стороне клиента и не требует перезагрузки страницы. JavaScript был разработан компанией Netscape в 1995 году... подробнее
Как известно, бичом современного Интернета является спам - непрошенная рассылка рекламных и прочих сообщений. По данным некоторых аналитиков, он составляет более 50% всех сообщений в Сети... подробнее