3D графика java: Создание движка для 3D-рендеринга на Java
Linux, Java, 3D-графика! | Мир ПК
Cи или не Си?
Королями разработки мультимедиа-приложений всегда были и остаются по сей день языки Си/Си++. Этому способствовали в первую очередь их широкое распространение и достаточно высокая производительность, хотя сначала создатели игр относились и к ним скептически. Однако довольно быстро замешательство программистов прошло, и вместе с Ассемблером начали применять Си/Си++ и даже Delphi. И вот теперь, возможно, наступает следующий переломный этап, этап виртуальных машин и байт-кода.
Стремительный прорыв языка программирования Java был в значительной степени обусловлен тем, что он предлагался как универсальное многоплатформное средство разработки приложений. Кроме того, в него были внедрены передовые объектно-ориентированные решения, развитые инструменты и обширная API- библиотека широкого назначения. По данным компании Evans Data, в США и Европе более половины разработчиков используют в своей работе Java, а в следующем году этот язык может стать популярнее Cи/Cи++ и Visual Basic! Конечно, успех не был бы таким громким без агрессивной маркетинговой политики компании Sun.
Тем не менее этот язык очень редко использовался для создания мультимедиа-приложений вследствие невысокой производительности систем, использующих виртуальную машину. Но в конце концов усилия производителей оборудования, оптимизация JIT-компиляторов и перевод большинства базовых классов языка в машинный код привели к изменению ситуации. Хотя зачем все это нужно, если уже есть Си++?
Одними из важнейших причин перехода на Java можно считать простоту и прозрачность языка, вобравшего в себя все лучшее от предыдущих поколений, включая Си++ и Smalltalk. Поскольку Java — бескомпромиссный объектно-ориентированный язык, то для работы с ним придется мыслить по-новому, что кому-то может показаться серьезным недостатком.
Другой существенный аргумент в пользу Java — реализованная и успешно действующая библиотека Media API Java. Для понимания ее преимуществ нужно лишь увидеть, насколько просто с ее помощью создавать сложнейшие приложения, что ниже и будет показано. Конечно, в качестве ближайшего конкурента можно рассматривать высокоуровневую библиотеку Open Inventor, но она предназначена для Си/Си++ и нуждается в интеграции с другими, поскольку не имеет средств создания интерфейса и обработки растровой графики, а также инструментов работы со звуком. Кроме того, подобные библиотеки значительно снижают быстродействие программ, что сближает их с Java.
Еще одно замечательное свойство Java — возможность передачи данных в Интернет. Для многих Web-мастеров это весьма привычная среда, ведь скриптовый язык Javascript подходит для создания динамических страниц на стороне клиента. А на некоторых Web-серверах, включая самый популярный Apache, можно привлекать Java для написания серверного сценария и создания аплетов, которые в сочетании с Media API будут представлять собой, например, интерактивные виртуальные галереи, загружающиеся на порядок быстрее, чем VRML-сцены, «говорящие головы» ведущих новостей, анимационные ролики и многое другое.
Для просмотра таких сцен, естественно, приходится загружать небольшую специальную библиотеку Java 3D Runtime Environment. Но ведь при применении других новейших технологий все равно нужно самостоятельно копировать подключаемые модули. Разработчикам же не требуется адаптировать свои программы под разные ОС и интерфейсы браузеров, и к тому же большинство аналогичных коммерческих решений стоят весьма дорого.
Хватит ли производительности?
Тест скорости морфинга. Каркас модели кисти (разрешение 9961 вершин). Многократная избыточность не влияет на качество модели |
Чтобы оценить реальные возможности Java при воспроизведении трехмерных сцен, был выбран ПК средней производительности (Duron-650, 128-Mбайт ОЗУ, видеоплата GeForce MX), работающий под управлением Windows 2000. Критерием оценки является число вершин у модели объекта, воспроизводимых с допустимой частотой кадров. Можно считать, что задержки незаметны, если демонстрируется 10 — 15 кадров в секунду (правда, иногда наблюдается дискретность движений). А вот темп меньше пяти кадров в секунду малопригоден даже при ровном воспроизведении, поскольку слишком велики задержки между кадрами.
Проанализируем производительность на двух простейших примерах. В первом из них выполнялся морфинг модели кисти. (Вообще-то морфинг бывает полезен для реализации мимики и анимации персонажей, а также для создания объемных спецэффектов.) Во втором просматривались файлы анимации, созданные в программе LightWave. (Да-да, представьте себе, что можно создать сцену в этом пакете, а потом просто демонстрировать ее в реальном времени по Интернету.)
Кстати, замечу, что оба примера — аплеты, и после загрузки через Сеть они способны работать на удаленных машинах.
Морфинг модели кисти выполнялся безупречно, вплоть до 2—3 тыс. вершин в модели объекта. Много это или мало? Например, такие возможности позволяют получить хорошо проработанную голову персонажа со всеми «аксессуарами», включая уши, зубы и даже рот, подготовленную для анимации. О подобной модели, имеющей около 4,5 тыс. вершин, было рассказано в «Мире ПК» № 12/2000, c. 44. «Говорящую голову» столь высокого качества не стыдно использовать на новостном сайте, а ее проработка и мимика могут быть гораздо лучше, чем у недавно прославившейся английской 3D-ведущей госпожи Новы. Но и 2—3 тыс. вершин — это еще не предел. Java справился с морфингом модели, содержащей до 12 тыс. вершин, обеспечив вполне приемлемое качество. Явного замедления не наблюдалось, но дискретность движения уже была заметной. Неприятных ощущений просмотр не вызывал. При большем количестве вершин морфинг происходил вполне равномерно, но с четкими фиксациями положения. Не исключено, что и такое воспроизведение может пригодиться.
Тест скорости воспроизведения анимации, созданной в LightWave |
При просмотре сцены, созданной в пакете LightWave, где выполнялся рендеринг объекта, вплоть до 16 тыс. вершин никакого замедления воспроизведения не отмечалось, после чего тестирование было прекращено, так как файл объекта уже с трудом обрабатывался самим графическим редактором. Но все же один неприятный момент был обнаружен: во всех случаях имели место совершенно одинаковые «торможения», вызванные, вероятно, загрузкой других программ или обработкой событий в системе. Но эти проблемы можно отнести к некоторым ограничениям аплетов, и в полноценных приложениях их, скорее всего, удастся избежать.
Результаты тестов свидетельствуют, что технология Java и уровень развития аппаратного обеспечения уже достаточно развиты для того, чтобы с их помощью можно было создавать некоторые виды мультимедийных приложений, в частности обучающие программы, аплеты для демонстрации товаров в Интернет-магазинах, базы данных с визуальным представлением знаний, редакторы изображений, 3D-моделей, сцен и даже игры определенного жанра. Кроме того, можно дополнительно повысить быстродействие программы, используя так называемые Native-компиляторы, преобразующие код Java-программы в машинно зависимый, но при этом их нельзя будет запускать в другой ОС или иной платформе.
Еще в пользу Java
Есть еще несколько немаловажных соображений, которые могут перевесить чашу весов в пользу Java:
- Доступность. Всегда можно бесплатно переписать последние версии SDK и различных библиотек с сайта компании JavaSoft (www.javasoft.com). Более того, теперь можно копировать одну из лучших и самых популярных в России сред разработки для Java — JavaBuilder фирмы Borland (www.borland.com). Обе компании (Borland и JavaSoft) регулярно выпускают обновления своих продуктов, причем предлагают версии своих пакетов для различных платформ, что позволяет не беспокоиться о совместимости.
- Удобство разработки. Здесь комментарии излишни. Язык Java гораздо проще многих других, но при этом компания-производитель очень хорошо и своевременно справляется с поддержкой всех технологических достижений в области программирования, включая CORBA, RMI, средства распараллеливания задач, удобный механизм обработки исключительных ситуаций и отслеживания событий, полностью объектно-ориентированная среда и пр. Спустя несколько лет после рождения языка можно с полной уверенностью утверждать, что Java всегда находится на острие технологических достижений.
- Широта возможностей, и никак иначе. Это становится понятно, стоит лишь заглянуть в раздел Products & APIs на Web-сайте компании JavaSoft. Вряд ли где-то еще найдется столь полное сосредоточение доступных API для одной среды разработки. Там есть все или, вернее, почти все, всего в этой жизни никогда не бывает.
- Развитость библиотек API для конкретных применений. Для разработки мультимедиа-приложений существуют Java 3D API, Java 2D API, Java Sound API, JAI (Java Advanced Imaging). Этого джентльменского набора вполне достаточно для реализации любых мультимедиа-задач, особенно если учитывать возможности его расширения и перспективы развития, намеченные компанией JavaSoft.
Java 3D API
Окно аплета, где демонстрируется одновременная работа с графикой и звуком |
Сейчас поставляется только в виде опции, что несколько смущает, ведь приходится самостоятельно загружать эти библиотеки для работы с 3D-приложениями. Но есть надежда, что этот пакет скоро войдет в комплект JDK, как это периодически происходит с другими Java API.
Компания JavaSoft реализовала возможности 3D в Java, создав собственную библиотеку и привязав ее к стандартным средствам OpenGL и DirectX. Но интерфейс программирования 3D-приложений на Java значительно отличается от того, что у OpenGL, приближаясь к имеющемуся у высокоуровневой библиотеки Open Inventor. Он стал следующим этапом развития средств создания трехмерной графики, причем реально работающим, доступным и многоплатформным.
На нынешнем уровне реализации Java 3D API обеспечивает следующие дополнительные возможности:
- Работа с файлами 3D-моделей (lwo — модели программы LightWave; obj — стандарт представления моделей компании Alias WaveFront). Такая поддержка позволяет довольно легко включать 3D-модели в проекты, предварительно отредактировав их в популярных пакетах вроде LightWave, Maya. Многие из других 3D-редакторов, в том числе распространяемые бесплатно, также поддерживают эти форматы.
- Работа с файлами сцен формата lws программы LightWave. Эта уникальная функция позволяет готовить сцены с анимацией в LightWave и представлять их в аплетах или Java-приложениях, концентрируясь на самой идее проекта и разработке дизайна, а не на программировании. Из свободно распространяемых библиотек подобными возможностями обладает, пожалуй, только Genesis 3D, но лишь для формата max программы 3D Studio Max.
- Морфинг моделей. Это довольно свежее и интересное решение. Достаточно упомянуть, что только в прошлом году появились графические акселераторы, поддерживающие морфинг. Но в Java он вполне успешно реализуется и на программном уровне. Наилучшее применение этой функции — анимация мимики персонажей, к тому же высокого качества, достаточно реалистичная и в реальном времени.
- Оптимизация файлов и сцен. В Java 3D предусмотрены гибкие механизмы оптимизации представления объекта. Разработчик может выбирать, что и в какой степени оптимизировать — каркас модели, текстуру и пр. Таким образом, удается значительно уменьшить размеры объектов, чтобы ускорить их загрузку через Интернет. Кроме того, можно определять разрешения модели в зависимости от ситуации, что весьма ускоряет работу в реальном времени, например путем сокращения числа полигонов в модели в зависимости от масштаба.
Это лишь несколько штрихов к портрету Java 3D API. Основное ее достоинство — возможность создания объектной модели представления сцен, но это будет рассмотрено в следующий раз в процессе построения 3D-приложения.
Java 2D API
Библиотека уже включена в JDK 1.3. Она представляет собой базовый набор средств для работы с различными графическими примитивами (точка, линия, прямоугольники, разновидности овала и пр.) и растровыми изображениями. В сущности, это вполне стандартное дополнение к среде разработки, подобные имеются почти для всех языков программирования. Однако у Java есть средства, позволяющие значительно улучшить качество отображения благодаря некоторым встроенным алгоритмам (двойная буферизация, задержка перерисовки изображения до завершения передачи файла из Интернета, интеграция с другими библиотеками и пр.)
Java Advanced Imaging (JAI)
Библиотека JAI является дополнением к 2D API. Они тесно интегрированы друг с другом, используя общие ресурсы. На данный момент эта библиотека является опциональной, но начиная с версии JDK 1.4 ее отдельные части уже будут включены в комплект средств разработчика.
Она представляет собой средства чтения-записи графических файлов (bmp, gif, FlashPix, jpeg, png, pnm и tiff), а также многочисленные средства для обработки растровых изображений, аналогичные фильтрам Adobe Photoshop. Чтобы облегчить манипуляции с двумерными картами изображений в трехмерных сценах, начиная с версии JDK 1.1, компания JavaSoft реализовала более тесное взаимодействие JAI с 3D API. Эту библиотеку можно вполне успешно использовать и для постобработки 3D-сцен с последующим их сохранением как видеофайлов. На данный момент продолжается интенсивное расширение функциональности JAI и, скорее всего, самое интересное еще впереди.
Java Sound API
Это довольно мощная библиотека для работы со звуком, и она также включена в JDK 1.3. Компания JavaSoft предлагает ее как средство для создания коммуникационных систем (конференции и телефония), музыкальных проигрывателей, игр, Web-сайтов с динамическим содержанием, а также для различного рода вспомогательных инструментов, работающих со звуком или MIDI-аппаратурой. Sound API предоставляет широкие возможности — от записи-чтения в аппаратные порты компьютера для взаимодействия с внешними устройствами и записи-чтения файлов (au, aiff, wav, midi) до непосредственной обработки аудиоданных и управления встроенным синтезатором. Так что с помощью этой библиотеки можно создавать программы, считывающие аудиоданные с микрофона, записывать их в удобном для вас формате файла, применять к ним алгоритмы обработки, фильтрации, анализа и выводить полученное на внешние устройства воспроизведения и записи. Кстати, предлагаются и такие средства, которые позволят разработчикам значительно расширить функциональность Sound API, например создавать дополнительные модули для работы с другими форматами файлов.
На этом закончим общее знакомство с Java Media API. Следующим шагом станет построение виртуальной студии подготовки анимационных 3D-роликов в Интернете и аплета их просмотра.
Продолжение следует
Об авторе
Виталий Галактионов — независимый эксперт, e-mail: [email protected]
Java 3d
Мы живем в трехмерном
мире. Наше зрение позволяет нам видеть
в трех измерениях с координатами x, y иz. Многие
из поверхностей, на которых отображается
графика, — например, экраны мониторов
или листы бумаги — являются плоскими.
Программирование трехмерной графики
позволяет нам воспроизводить реалистичные
модели нашего объемного мира на
поверхностях в двухмерном виде.
Трехмерная графика имеет преимущества
в том смысле, что практически все, что
вы можете видеть вокруг, можномоделировать
— цифровым образом представить
форму и размеры, а такжеотобразить —
нарисовать на экране компьютера.
В настоящее время
существует большое число приложений,
позволяющих работать с трехмерной
графикой — от игр и медицинского
оборудования до трехмерных игр и
хранителей экранов. Достижения в области
компьютерного аппаратного обеспечения
привели к значительному росту интереса
к трехмерной графике. Успех в создании
высокопроизводительного аппаратного
обеспечения способствовали разработкам
высокоэффективных интерфейсов
прикладного программирования трехмерной
графики — от созданного в 70-х годах API
CORE от Siggraph и создания в 80-х годах прошлого
века OpenGL компанией SGI, до
сегодняшних средств программирования
трехмерной графики, включая
MicrosoftDirectSD иJava3D.
Трехмерная графика
требует графических алгоритмов,
использующих сложный математический
аппарат. Java 3D предоставляет
разработчикам надежные и развитые
возможности для работы с трехмерной
графикой, в то же время оставляя за
сценой математику, необходимую для
реализации графических алгоритмов.
Java 3D — это высокоуровневый API
программирования трехмерной графики.
Java 3D управляет всеми необходимыми
низкоуровневыми операциями для работы
с графикой, поэтому разработчики могут
создавать сложные трехмерные сцены,
не задумываясь об используемом аппаратном
обеспечении. Подобно Java, код Java 3D, будучи
написанным, однажды, работает
повсеместно. Приложения Java 3D
будут работать аналогичным образом на
различных графических платформах.
Sun Microsystems
разрабатывала Java 3D API, имея в виду четыре
основные цели: переносимость приложений,
независимость от аппаратного обеспечения,
масштабирование производительности
и способность работать с трехмерной
графикой через сеть. Упрощение сложных
графических операций играло ключевую
роль при разработке Java 3D API. Вот некоторые
области и сферы применения API Java 3D:
визуализация
трехмерных данных,взаимодействующие
между собой приложения,игры (особенно
сетевые с несколькими участниками),деловая графика,
интерактивные
обучающие системы,моделирование и
визуализация молекулярных структур,разработка
трехмерных Web-приложений,разработка
трехмерных графических пользовательских
интерфейсов.
Java 3D предлагает
несколько функциональных возможностей,
которые могут использоваться для
разработки трехмерных графических
приложений:
Поведения. Java
3D поддерживает множествоповедений, включая
анимацию и перемещение,обнаружение
столкновений (выявление, когда
два объекта сталкиваются) и морфинг
(трансформацию одного изображения в
другоеизображение).
Вуалирование. Java
3D поддерживает вуалирование содержимого,
что ограничивает возможность просмотра
определенных объектов в сцене. Например,
вуалирование помогает создать
реалистичную модель ливня или урагана
в игре.
Геометрия. Java
3D имеет встроенные трехмерные графические
примитивы для создания геометрических
фигур. В Java 3D можно отображать сцены,
созданные в других приложениях трехмерной
графики, например, SDStudio Мах, VRML и
LightwaveSD.
Освещение. Java
3D позволяет освещать объекты трехмерной
сцены. Java 3D поддерживает различные виды
освещения и управления его цветом,
направлением и интенсивностью.
Звук. Уникальной
особенностью Java 3D является поддержка
SD-звука.
* Текстуры. Java
3D поддерживает наложение текстур на
поверхности трехмерных фигур.
API мобильной 3D-графики — Mobile 3D Graphics API
«M3G» перенаправляется сюда. Для получения информации о метаболите морфина см. Морфин-3-глюкуронид .
Снимок экрана Asphalt 3: Street Rules , демонстрирующий возможности Mobile 3D Graphics API.
Мобильный 3D — графика API , обычно называют M3G , это спецификация определении API для написания Java — программ , которые производят 3D компьютерной графики . Он расширяет возможности Java ME , версии платформы Java, адаптированной для встраиваемых устройств, таких как мобильные телефоны и КПК . Объектно-ориентированный интерфейс состоит из 30 классов , которые могут быть использованы для рисования сложных анимированных трехмерных сцен. M3G был разработан в рамках процесса сообщества Java как JSR 184. По состоянию на 2007 год текущая версия M3G - 1.1, но версия 2.0 находится в разработке как JSR 297.
Цели M3G
M3G был разработан для удовлетворения конкретных потребностей мобильных устройств, которые ограничены с точки зрения памяти и вычислительной мощности и которым часто не хватает FPU и графического оборудования, такого как графический процессор . Архитектура API позволяет полностью реализовать его внутри программного обеспечения или воспользоваться преимуществами оборудования, присутствующего на устройстве.
Немедленный и сохраненный режимы
M3G предоставляет разработчикам два способа рисования трехмерной графики: немедленный режим и сохраненный режим . В немедленном режиме графические команды выдаются непосредственно в графический конвейер, и механизм визуализации выполняет их немедленно. При использовании этого метода разработчик должен написать код, который конкретно сообщает механизму рендеринга, что рисовать для каждого кадра анимации . Камера и набор источников света также связаны со сценой, но не обязательно являются ее частью. В непосредственном режиме можно отображать как отдельные объекты, так и целые сцены (или миры, с камерой, источниками света и фоном как части сцены).
В сохраненном режиме всегда используется граф сцены, который связывает все геометрические объекты в трехмерном мире в древовидной структуре , а также определяет камеру, источники света и фон. Информация более высокого уровня о каждом объекте, такая как его геометрическая структура, положение и внешний вид, сохраняется от кадра к кадру.
Другие свойства
Стандарт M3G также определяет формат файла для данных 3D-модели, включая данные анимации. Это позволяет разработчикам создавать контент на ПК, который может быть загружен с помощью M3G на мобильные устройства.
дальнейшее чтение
- Алессио Малиция: мобильная 3D-графика , Springer, 2006, ISBN 978-1-84628-383-3
- Кари Пулли, Томи Аарнио, Вилле Миеттинен , Киммо Роймела, Яни Ваарала: мобильная 3D-графика с OpenGL ES и M3G , Морган Кауфманн, 2007,
ISBN 0-12-373727-3 - Клаус Хёфеле: Мобильная 3D-графика: Изучение 3D-графики с помощью Java Micro Edition , Thomson Course Technology PTR, 2007,
ISBN 1-59863-292-2 - Карлос Моралес, Дэвид Нельсон: Разработка мобильных 3D-игр: от начала до рынка , Charles River Media, 2007,
ISBN 1-58450-512-5
Утилиты M3G
- Desktop-M3G — реализация M3G с открытым исходным кодом для Linux и Android
- XMM3G — реализация M3G с открытым исходным кодом для Windows, WinCE, Linux, Android, iOS и Bada
- M3X — XML-кодирование формата файла .m3g и связанных с ним инструментов с открытым исходным кодом
- Wizzer Works M3G Viewer — набор инструментов с открытым исходным кодом для просмотра и управления файлами .m3g
- M3GExport для Maya
- Mascot Capsule M3G Exporter для 3ds Max, Maya, Lightwave и Softimage | XSI
- M3G Exporter для Milkshape 3D для MilkShape3D
- Blender Exporter — экспортер M3G с открытым исходным кодом для Blender
- Blender Converter — конвертер уровней файлов с открытым исходным кодом для Blender
- M3G Exporter for Metasequoia — экспортер M3G с открытым исходным кодом для Metasequoia
- M3G Reader Writer — библиотека C / C ++ с открытым исходным кодом для чтения / записи файлов .m3g
внешние ссылки
<img src=»https://en.wikipedia.org//en.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1×1″ alt=»» title=»»>
Лучший подход к выбору языков программирования и API 3D-графики для моделирования физических экспериментов
Я начинаю исследовательский проект и должен прикрепить язык программирования и API 3D-графики, где я буду создавать среду в области молекулярной клеточной биологии, где буду симулировать большой диапазон экспериментов в силиконе. Это будет продолжающийся проект, который будет расширяться и расширяться. Эксперименты будут проводиться в дискретное время и будут охватывать сложный физический движок. Довольно графика не имеет значения и не является аудио. Я запускаю Ubuntu, и это среда, в которой я буду развиваться.
Пар, которые я исследовал до сих пор:
java : гибкая, масштабируемая, организация lib /dependency (maven), oo
- jogl: полный контроль над графикой
- jMonkeyEngine: полная игровая библиотека, включает jBullet, может быть, немного перехитрить то, что мне нужно.
c ++ : высокая скорость, низкий уровень, оо
- opengl: полный контроль над графикой
- майя: встроенный физический движок, уже существующая инфраструктура, проприетарная, не бесплатная
matlab : тяжелая математика, но ее трудно поддерживать и масштабировать
- simulink: проприетарный, не бесплатный
Я наименее знаком с Майей, но это было предложено мне другом как хороший подход. Когда Майя будет хорошим решением и будет ли это хорошим выбором для такого рода случаев? Точно так же, как мышление jMonkey было бы излишним, это своего рода мое чувство на майя.
Есть ли какие-либо другие пары, которые я должен исследовать?
Также есть ли у кого-нибудь опыт изменения существующей библиотеки физики и ее гибкости или сложности (например, Bullet, JBullet, jinngine)? Не уверен в этом, если я начну с нуля или попробую изменить /расширить существующий.
Любые мысли, обратная связь, ввод или любые другие предложения были бы оценены.
Спасибо
Программирование трехмерной графики на Java, часть 3: OpenGL
Прошло некоторое время с момента нашей последней статьи в этой серии о программировании трехмерной графики на Java (подробнее об этом в конце этой колонки). Вот краткое напоминание о том, что мы обсуждали в последний раз и на чем остановились.
В двух предыдущих столбцах (см. Ресурсы) мы изучали Java 3D. Мы обсудили статический контент и небольшие сцены, затем использовали более крупные графы сцен и встроили интерактивность в некоторые базовые трехмерные миры.
Теперь, когда вы немного знаете об использовании Java 3D, пришло время сравнить и сопоставить подход Java 3D к 3D-графике с ведущим конкурентом графического API: OpenGL.
Обратите внимание, что эта статья изначально предназначалась для интенсивного использования кода, но позднее решение Arcane Technologies относительно привязки Magician (см. Ниже) потребовало удаления примеров кода. Я надеюсь, что содержание этой статьи может быть адаптировано для будущей привязки Java-OpenGL, пока недоступной в Консорциуме OpenGL.
В любом случае я постарался предоставить все релевантные и полезные ссылки и URL-адреса, связанные с OpenGL, в разделе «Ресурсы» в конце этого столбца. Если вы хотите глубже изучить Java-OpenGL, я настоятельно рекомендую вам просмотреть эти ссылки.
Сравнение Java-OpenGL с Java 3D
В предыдущих статьях по Java 3D я представил список сильных и слабых сторон использования Java 3D для графических приложений. Давайте повторим этот список, но сделаем это, посмотрев на сильные и слабые стороны решений на основе Java-OpenGL вместо решений на основе Java 3D.
Сильные стороны использования OpenGL (и, в зависимости от расширения, и, где это отмечено, привязок Java-OpenGL):
OpenGL предоставляет процедурную модель графики
Это близко соответствует многим алгоритмам и методам, которые программисты графики использовали исторически. Процедурная модель одновременно интуитивно понятна и проста для многих опытных поклонников 3D-графики.
OpenGL обеспечивает прямой доступ к конвейеру рендеринга
Это верно для любых привязок различных языков, в том числе для большинства привязок Java. OpenGL позволяет программистам напрямую указывать, как должна отображаться графика. Можно не просто намекать и просить, как в случае с Java 3D, оговаривается.
OpenGL оптимизирован всеми мыслимыми способами
OpenGL оптимизирован для аппаратного и программного обеспечения и целевых платформ — от самых дешевых ПК и игровых консолей до самых высокопроизводительных графических суперкомпьютеров.
Производители любого оборудования, связанного с 3D-графикой, поддерживают OpenGL
OpenGL — это
в
стандарт, по которому поставщики оборудования измеряют свои графические технологии, без исключений. Когда Microsoft присоединилась к SGI в инициативе Fahrenheit, для многих стало все более очевидным, что это, по сути, косвенное признание Microsoft того, что OpenGL выиграл войну API для 2D и 3D графики.
С другой стороны, нет ничего идеального. OpenGL и, конечно, привязки Java-OpenGL имеют некоторые существенные недостатки:
Сильные стороны процедурного подхода к программированию графики одновременно являются слабостью для многих Java-программистов.
Для относительно новых программистов, многие из которых, возможно, получили свои первые формальные инструкции по программированию на Java с использованием объектно-ориентированных методологий, процедурный метод OpenGL плохо сочетается с объектно-ориентированным подходом и хорошей инженерной практикой.
Оптимизация OpenGL многими поставщиками призвана уменьшить выбор оборудования.
В интересах каждого поставщика создавать проприетарные расширения и вносить проприетарные оптимизации для продажи большего количества собственного оборудования. Как и при любой оптимизации оборудования, вы должны использовать оптимизацию OpenGL для конкретных ускорителей, понимая, что каждая оптимизация для одной платформы снижает переносимость и производительность для нескольких других. Оптимизация Java 3D более общего назначения в основном направлена на максимальную переносимость приложений Java 3D.
Хотя интерфейсы C для OpenGL распространены повсеместно, интерфейсы Java еще не стандартизированы и широко не доступны.
Продукт Magician от Arcane Technologies до недавнего времени был на рынке, чтобы изменить эту проблему переносимости, но с его кончиной уходит большая часть кроссплатформенной истории Java-OpenGL, по крайней мере, в настоящее время. Подробнее об этом ниже.
Раскрытие OpenGL внутренних деталей процесса рендеринга может значительно усложнить простые программы для работы с 3D-графикой.
Мощность и гибкость достигаются за счет сложности. В быстрых циклах разработки современного технологического мира сложность сама по себе является чем-то, чего следует избегать там, где это возможно. Старая пословица об ошибках верна: чем больше строк кода, тем больше ошибок (в общем).
Как вы можете видеть из плюсов и минусов подходов, основанных на OpenGL, Java-OpenGL сильна во многих областях, в которых Java 3D слаба. OpenGL предоставляет программистам низкоуровневый доступ к процессу рендеринга, которого Java 3D явно избегает, а OpenGL в настоящее время доступен на гораздо большем количестве платформ, чем Java 3D (не считая Magician). Но такая гибкость имеет свою потенциальную цену: у программистов есть много возможностей для оптимизации, что, наоборот, означает, что у них есть много возможностей, чтобы облажаться. Java 3D имеет больше встроенных средств оптимизации и более простую модель программирования, которая может оказаться особенно полезной для программистов, плохо знакомых с Java, работой с трехмерной графикой или программированием сетевой и распределенной графики.
Not Found (#404)
Скидки предоставляются слушателям АИШ при оплате законными представителями несовершеннолетнего по решению комиссии ИИТ БГУИР.
Скидка может предоставляться только по одному из оснований. При одновременном наличии у слушателя права на получение скидки по двум основаниям, ее размер определяется по основанию, предполагающему наибольшую скидку.
Размер скидки устанавливается в процентном выражении от стоимости образовательной услуги, сформированной согласно калькуляции на образовательную программу до начала обучения на основании решения комиссии.
Скидки предоставляются следующим категориям слушателей:
- обучающимся повторно в текущем учебном году в АИШ – в размере до 10%;
- при одновременном обучении в АИШ двух и более детей из одной семьи – в размере до 15% на каждого из детей;
- для школьников, одновременно посещающих две программы – в размере до 20% на вторую программу;
- являющимся членами малообеспеченных семей – в размере до 20 %;
- являющимся детьми-сиротами, детьми, оставшимися без попечения родителей, а также лицам в возрасте от 18 до 23 лет, потерявшим последнего из родителей в период обучения, – в размере до 20 %;
- детям-инвалидам в возрасте до 18 лет – в размере до 25 %;
- слушателям из семей, в которых воспитывается трое и более несовершеннолетних детей, – в размере до 20 %.
- для школьников – детей сотрудников ИИТ БГУИР, БГУИР – в размере до 10%.
- иным категориям слушателей АИШ по решению комиссии – в размере до 20%.
- на проведение первого занятия программы обучения в АИШ для определения потенциальной возможности продолжения обучения по выбранной программе – в размере 100%;
Компьютерная графика на основе OpenGL. Часть 6. WebGL::Журнал СА 9.2015
Рубрика: Разработка / | Мой мир Вконтакте Одноклассники Google+ |
АЛЕКСЕЙ ВЕРИЖНИКОВ, филиал ЗАО «Корпорация ГРИНН» туристический многофункциональный комплекс «ГРИНН», системный архитектор, [email protected]
Компьютерная графика на основе OpenGL
Часть 6. WebGL
Познакомимся с технологией OpenGL для работы с веб-технологиями – WebGL
Что такое WebGL?
Большинство пользователей привыкли применять системы работы с компьютерной графикой, устанавливая какое-либо приложение стационарно на диск своего ПК, и работать с ним, используя локальную сеть или интернет для обмена данными. Но не всегда получается это сделать, так как иногда доступ к диску и установке приложений закрыт (например, на рабочем компьютере в организации, где cисадмин забыл поднять права пользователя).
Сейчас уже известны системы работы в облаках с аналогами офисов и графических утилит, таких как Photoshop, систем разработки AutoCAD, систем 3D моделирования.
Не стоит забывать о online компьютерных играх, которые работают в браузере без установки на диск компьютера. Как пример, это Quake, Unreal Tournament и т.д.
Теперь я хочу познакомить с вариантами реализации данных задач.
Сейчас веб-приложения можно разделить по используемым технологиям на несколько типов.
- Технологии Adobe Flash и HTML5.
- Технологии Java-апплетов и Java-сервлетов.
- WebGL-технологии.
Расскажу о каждой из этих технологий в нескольких словах.
Adobe Flash (ранее Macromedia Flash) – технология использования виртуальной машины Flash, для запуска и отображения приложений, созданных на языке ActionScript. Разработка производится в среде Adobe Flex SDK. У данной технологии есть много достоинств и свои недостатки.
Достоинством можно считать ее открытость и повсеместное распространение. На Flash создают все – начиная от игр и заканчивая плеерами для просмотра видео. Огромное количество примеров и документации в интернете способствует развитию технологии.
Самый основной недостаток – это обязательное наличие виртуальной машины Adobe Flash, которую для некоторых браузеров нужно доставлять в обязательном порядке. Особенно остро эта проблема возникает в Linux и других *nix-системах (в Google Chrome реализована своя виртуальная машина, обрабатывающая Flash, которая позволяет не устанавливать что-то дополнительно).
Java-технологии используются больше в корпоративных проектах. Для них необходима виртуальная машина Java, установленная на стационарном компьютере. Особенностями можно считать тот факт, что Java-апплеты – практически идентичны по сравнению с Java-приложениями. В отличие от Flash-технологии в Java функционал работы с 3D графикой и OpenGL более развит.
WebGL – появившиеся сравнительно недавно технологии, позволяющие использовать возможности оборудования без установки дополнительных надстроек и виртуальных машин. Обязательным условием работы является наличие браузера, поддерживающего WebGL. На данный момент такая поддержка реализована в большинстве современных браузеров.
Несомненным достоинством является то, что не нужно доставлять какие-либо дополнительные плагины и модули для работы WebGL.
У данных технологий есть недостатки, связанные с самой реализацией программного кода для WebGL. Все программирование ведется с использованием встроенного языка JavaScript. Этот язык имеет большое распространение в последнее время, но является однопоточным, что затрудняет создание приложений, к которым предъявляются все более высокие требования.
Статью целиком читайте в журнале «Системный администратор», №9 за 2015 г. на страницах 53-55.
PDF-версию данного номера можно приобрести в нашем магазине.
- Верижников А. Компьютерная графика на основе OpenGL. Части 3-4. Основы 3D-математики с учетом SSE-технологий. // «Системный администратор», №7-8, 2013 г. – С. 90-95 (http://samag.ru/archive/article/2494).
- Сайт three.js – http://threejs.org.
Мой мир
Вконтакте
Одноклассники
Google+
Программирование трехмерной графики на Java, часть I
Чтобы создать настоящую платформу Java, Sun на раннем этапе осознала, что ей необходимо заполнить картину API за пределами ограниченной функциональности, доступной в базовой платформе Java 1.0. Sun значительно расширила ядро с выпусками Java 1.1 и Java 2 / JDK 1.2, но в головоломке Java все еще отсутствуют некоторые элементы.
Sun и ее партнеры разработали Java Media and Communication API, чтобы предоставить недостающие элементы мультимедийного программирования.Две самые большие части, 2D и 3D графика, нацелены на Java 2D и 3D API соответственно. Java 3D была выпущена как Extension API, обеспечивающая поддержку трехмерной графики для недавно выпущенной платформы Java 2 / JDK 1.2.
Java 3D предназначен для того, чтобы дать разработчикам Java возможность писать апплеты и приложения, которые предоставляют пользователям трехмерный интерактивный контент. В этой области у Sun есть серьезная конкуренция со стороны других технологий 3D-графики, и Java 3D предстоит тяжелая битва, если она хочет победить действующий стандарт графики OpenGL.
Я расскажу о Java 3D и Java-OpenGL в трех статьях в течение месяца. Я также продемонстрирую использование VRML в Java 3D с загрузчиками контента VRML97 и браузером Java 3D VRML97. Я буду следить за статьями Java 3D и VRML, посвященными использованию привязок Java-to-OpenGL.
Плюсы и минусы Java 3D
В этом выпуске мы начинаем нашу экскурсию по API 3D-графики для Java с изучения Java 3D. Мы начнем с обсуждения некоторых основных сильных и слабых сторон API.
Пункты продажи Java 3D:
- Обеспечивает высокоуровневый объектно-ориентированный вид трехмерной графики. В Java 3D это частично достигается за счет использования трехмерной графической модели на основе графа сцены. (Сейчас мы обсудим эту концепцию более подробно.) Этот подход призван помочь программистам, не имеющим большого опыта в графическом или мультимедийном программировании, использовать 3D в своих приложениях. В отличие от низкоуровневых процедурных 3D API, таких как OpenGL, которые предназначены для оптимизации для достижения максимально возможной скорости и дают программистам максимально возможный контроль над процессом рендеринга, Java 3D призвана быть достаточно простой для изучения каждым программистом.
- Если вам не нужен низкоуровневый доступ к операциям рендеринга, можно использовать Java 3D. Доступ к рендерингу ограничен запросами через атрибуты и биты возможностей, аналогичные по форме и функциям подсказкам рендеринга Java 2D. (См. В разделе Ресурсы ссылки на мою предыдущую серию статей о JavaWorld по Java 2D, в которую включены обсуждение и примеры подсказок по 2D-рендерингу).
- Java 3D оптимизирован по скорости там, где это возможно. Среда выполнения использует биты возможностей рендеринга для оптимизации графа сцены для максимально быстрого рендеринга.Такой подход делает Java 3D более применимым к интерактивным графическим средам (игры, симуляции, ситуации с малой задержкой), чем к офлайновым высококачественным графическим приложениям (например, фермам рендеринга).
- Для импорта содержимого в среду выполнения Java 3D доступно большое и постоянно растущее число загрузчиков 3D. Sun и Консорциум VRML (недавно переименованный в Консорциум Web 3D) сделали загрузчик файлов и браузер Java 3D VRML97 свободно доступными с кодом. В следующей части этой серии мы более подробно рассмотрим загрузчики Java 3D.
- Java 3D требует возможности векторной математики, недоступной где-либо еще на платформе Java. Эти математические операции в настоящее время находятся в пакете javax.vecmath и могут быть перенесены в базовую платформу в будущем.
- Java 3D поддерживает ряд экзотических устройств (например, палочки, информационные перчатки и гарнитуры). Пакет com.sun.j3d.utils.trackers, включенный в реализацию Sun, предоставляет классы для устройств Fakespace, Logitech и Polhemus.Эти устройства не получили широкого распространения за пределами игровых и симуляционных арен, поэтому информация о них довольно скудная. Следовательно, я не буду обсуждать их более подробно в этой серии. Однако, если вы хотите узнать больше о поддержке устройств Java 3D, обратитесь к сайтам Sun Java 3D и в архиве списка рассылки Java 3D (оба доступны по основным URL-адресам Sun Java 3D, включенным в ресурсы ниже).
Java 3D имеет много плюсов, но как насчет минусов? В их числе:
- Java 3D — это стандартное расширение API.Лицензиатам платформы Java предоставляется возможность реализовать API, если они хотят, но они не обязаны его реализовывать. Позиционирование Java 3D как стандартного расширения сопряжено с риском снижения переносимости 3D-кода Java на разные платформы — большинству поставщиков приходится бороться за внесение изменений и дополнений только в основную платформу.
- Java 3D имеет серьезные ограничения доступности. Это результат статуса Java 3D как API расширения. Единственный крупный поставщик, который в настоящее время предоставляет реализацию Java 3D, — это Sun с ее реализациями для Solaris и Win32.По сравнению с OpenGL, который доступен для всех разновидностей Unix, Windows и многих других операционных систем, кроссплатформенная переносимость 3D-кода Java выглядит сомнительной.
- Наряду с проблемами доступности программного обеспечения возникает дефицит документации. Sun прилагает отважные усилия по обучению разработчиков и поддержке Java 3D, но этого все еще не хватает по сравнению с другими усилиями отрасли по документированию OpenGL и его использования. Веб-сайт Консорциума OpenGL намного глубже и шире, чем все, что Sun удалось собрать для Java 3D до сих пор.Это немаловажный момент: относительная сложность API-интерфейсов 3D-графики требует хорошей документации.
- Java 3D скрывает детали конвейера рендеринга от разработчика. Поскольку Java 3D является высокоуровневым API, он намеренно скрывает детали конвейера рендеринга от разработчика, что делает его непригодным для значительного числа проблем, где такие детали важны. Разработчики игр, в частности, часто используют низкоуровневый доступ к графической системе и могут столкнуться с трудностями при передаче управления среде выполнения Java 3D.
- Java 3D имеют большой вес. То есть у них есть собственный (не Java) одноранговый узел, который фактически выполняет рендеринг. Это может усложнить разработку графического интерфейса пользователя, если вы используете Java Swing и его полностью Java-компоненты или облегченные компоненты. Есть некоторые специальные обходные пути, но в целом легкие и тяжелые компоненты плохо сочетаются в одних и тех же объектах-контейнерах и окнах. Дополнительную информацию о проблемах с легковесными и тяжелыми компонентами можно найти в разделе «Ресурсы» в конце этой статьи.
Компоненты
Установка Java 3D
Теперь, когда мы понимаем основные функции и ограничения Java 3D, давайте приготовимся опробовать некоторые примеры кода.
Java 3D доступна для Win32 и Solaris. Более зрелые реализации Java 3D от Sun построены на основе OpenGL. Реализация Direct3D с альфа-качеством также доступна для Win32. Все требуют Java 2 / JDK 1.2. Sun выпустила окончательную 3D-реализацию Java вскоре после выпуска JDK 1.2, так что выпущенная Java 3D требует для выполнения выпущенной Java 2 / JDK 1.2 или будущих версий.
Немного сбивает с толку: Sun выпустила альфа-реализации Java 3D 1.0, которые соответствовали Java 3D 1.0 API, но никогда не выпускала ничего, кроме альфы для 1.0 API. Затем Sun изменила API, выпустив модифицированную версию как Java 3D 1.1 API. За этой версией последовали выпуски так называемой бета-реализации 1.1, всего два. Затем Sun выпустила финальную версию Java 1.1 API и реализация вскоре после окончательного выпуска платформы Java 2 / JDK 1.2. Будем надеяться, что API стабилизировался и не будет обновляться, но пусть покупатель остерегается.
Поскольку мы будем рассматривать привязки Java OpenGL в будущей статье, я решил сэкономить и использовать версию Java 3D OpenGL также в этих инструкциях по установке. Если вы установите версию OpenGL для использования с этими 3D-примерами Java, у вас будут библиотеки визуализации, необходимые для примеров Java-OpenGL, которые появятся позже.
Программные компоненты, необходимые для использования Java 3D:
- Среда выполнения Java 3D. Обязательно выберите версию Java 3D OpenGL для своей платформы (я использую Win32). Выпущенная Win32 Java 3D для разработки (выберите вариант JDK) — это версия 1.1, java3d1_1-win32-opengl-jdk.exe и весит 3,2 МБ.
- OpenGL 1.1 в комплекте с Windows NT 4.0 и Windows 95 OSR 2. Если у вас есть версия OSR 1 Windows 95, вы можете загрузить поддержку OpenGL.Последняя реализация Windows 95-OpenGL 1.1 доступна от Microsoft как opengl95.exe и занимает примерно 0,5 МБ.
- JDK 1.2, доступный от Sun. Обратите внимание, что JDK 1.2 напрямую соответствует платформе Java 2. (Sun переименовала Java 1.2 в Java 2 в последнюю минуту перед выпуском, что блестяще продемонстрировало мастерство маркетинга и лицензирования.) Отметим также, что для Java 3D требуется платформа 1.2, и Sun заявила в списке рассылки java3d-Interest, что у нее есть нет интереса к разделению API и попыткам сделать его доступным с предыдущими выпусками платформы.
При желании вы также можете загрузить документацию Java 3D и примеры кода. Оба доступны по той же ссылке, что и среда выполнения Java 3D.
Обратите внимание, что вам больше не требуется устанавливать переменные среды CLASSPATH, чтобы исполняемые файлы Java или Appletviewer могли найти библиотеки расширений. В Java 2 / JDK 1.2 Sun наконец-то создала стандартный каталог расширений. Этот каталог находится в / jre / lib / ext / в каталоге установки JDK.Например, в моей системе JDK 1.2 установлен по адресу:
C: \ jdk1.2 \
, а стандартный каталог расширений находится по адресу:
.
C: \ jdk1.2 \ jre \ lib \ ext \
Все библиотеки расширений должны помещать свои jar-архивы в этот каталог расширений во время установки, и все стандартные инструменты JDK умеют искать здесь необходимые файлы классов.
Для Sun Java 3D эти архивы включают как общедоступные (задокументированные в спецификации Java 3D API), так и частные (зависящие от реализации Sun) классы.Архивы публичных занятий включают:
- j3dcore.jar — содержит файлы классов для общедоступного пакета Java 3D javax.media.j3d.
- vecmath.jar — содержит классы для javax.vecmath.
Частные архивы включают:
- j3daudio.jar — архивирует классы com.sun.j3d.audio, которые создают поддержку пространственного звука поверх настраиваемой копии Java-части Java Sound, звукового движка на основе Headspace, дебютировавшего в Java 2.
- j3dutils.jar — инкапсулирует различные служебные классы Sun в 16 пакетов и подпакетов в com.sun.j3d. Я углублюсь в эти пакеты в следующей части нашего обсуждения Java 3D.
Обратите внимание, что теоретически вы можете создавать экземпляры и вызывать методы для любого из классов, предоставленных в нестандартных пакетах, таких как com.sun, но будьте осторожны: нет гарантии, что они будут доступны на платформе, на которой выполняется ваш код. В настоящее время Java 3D доступна только от Sun, поэтому многие разработчики фактически используют классы в частных архивах Sun.Вы должны знать о потенциальном компромиссе, связанном с переносимостью, если вы сделаете это.
Нет никакого волшебства в том, как общедоступные и частные 3D-классы Java взаимодействуют с системными ресурсами. Sun устанавливает собственные библиотеки в J3D.dll и j3daudio.dll в каталог / jre / bin /. Классы Java 3D используют собственные методы для вызова этих DLL и взаимодействия с платформой Win32 и библиотекой рендеринга OpenGL. (Подобные библиотеки существуют для реализаций Solaris.)
Последнее замечание по установке: конвейер рендеринга OpenGL предназначен для использования преимуществ аппаратного ускорения OpenGL для ускорения ваших графических приложений.Однако для целей этой колонки вы должны иметь возможность экспериментировать с примерами без какого-либо специального оборудования. (Фактически, я разрабатываю все примеры на ноутбуке Pentium 150MHz MMX без оборудования для ускорения OpenGL.) Если вас интересуют карты ускорения, вам следует обратиться на веб-сайт OpenGL или в список рассылки Java 3D (см. Ресурсы). для дополнительной информации. Я планирую включить немного больше информации в будущие статьи о Java 3D и Java-OpenGL.
Java-3D / Java3D: сборник ресурсов для разработки Java3D.
Загрузки
Java3D 1.5.2 (окончательный стабильный выпуск от Sun Microsystems / Oracle)
Java3D 1.6.1 (последний стабильный выпуск от сообщества JogAmp)
Установка
Распаковка версии Java3D 1.5.2
Установка Eclipse / Netbeans 1.5.2
Установка Java3D 1.6.0+, выпуск
Сайты
Java3D 1.5.2 Документация
Java3D.org
J3D.org
Учебники
Программирование трехмерной графики на Java3D
Программирование трехмерной графики на Java
Как установить Java 3D
Введение в Java3D
Создание системы частиц для Java3D
Видео
Учебное пособие по Java3D от Райана Бишопа
Презентации
Java3D — Форма здания
Взаимодействие и анимация в Java3D
Программирование Java3D Технический обзор
Введение в Java3D
Обзор J3D
Анимация Java3D
Исходный код демонстрации
Примеры Java3D 1.5,2
Примеры Java3D (Java2)
PDF-файлы
Спецификация API Java3D
Начало работы с Java3D API
Обзор Java3D
Руководство по производительности для Java3D
Знакомство с Java3D
Оценка API-интерфейсов 3D Scene Graph для Java (магистерская работа)
Программирование игр с помощью Java и Java3D
Книги
Программирование Java3D Дэниел Селман
Программирование игры-убийцы, Эндрю Дэвисон
Пользовательские 3D-интерфейсы с Java3D, Джон Баррилло
Запуск Java3D API, Аарон Э.Уолш и Дуг Герингер
(PDF) JavaGL 1 — Библиотека трехмерной графики в Java
2. Для основного графического ядра мы поместили сюда большую часть наших усилий
. Например, команда рисования
в OpenGL может быть выполнена немедленно или отложена в списке отображения
, в зависимости от состояния списка отображения
. В C мы можем просто использовать указатели функции
для решения этой проблемы. В Java, поскольку
нет указателей, вместо этого мы используем наследование классов
.Мы также обращаемся к Graphics Gems [3, 4,
5] для повышения производительности.
3. Результаты
В настоящее время мы реализовали более 150 функций
в JavaGL, включая функции для 3D-модели
преобразование, проекцию 3D-объекта, буфер глубины,
плавное затенение, освещение, материал и список отображения.
Функции, которые пока не поддерживаются, в основном
для сглаживания и наложения текстур.
Чтобы оценить производительность JavaGL, мы используем тестовую программу
, которая визуализирует 12 сфер с различными назначенными материалами
, как показано на рисунке 3.Мы
выполняем тестовую программу как на SUN Sparc20
, так и на ПК Pentium-100. Мы также переписали ту же самую тестовую программу
в Mesa и OpenGL 1.1 для
Microsoft [6] и измерили время рендеринга, как
, указанное в таблице 1.
На SUN Sparc20 тестовая программа с Mesa —
примерно в 20 раз быстрее, чем JavaGL, как утверждает
SUN, что Java примерно в 20 раз медленнее, чем C [8].
Это можно значительно улучшить, если существует лучший интерпретатор Java
.В таблице 2 показаны эффекты компиляторов и интерпретаторов Java
. В той же конфигурации
, если заменить библиотеку класса
SUN JDK на библиотеку, оптимизированную компилятором Symantec Café
[9], заметных улучшений не будет; Если
заменить интерпретатор SUN JDK на интерпретатор Symantec
Café, который поддерживает компилятор Just-In-Time
(JIT), производительность увеличивается более чем в 3 раза.
На ПК Pentium-100, поскольку Mesa для
Windows 95 еще не доступна, мы сравниваем
JavaGL с OpenGL 1.1 для Microsoft. Хотя
мы использовали компилятор Symantec Café и интерпретатор
, OpenGL 1.1 для Microsoft по-прежнему в 16
раз быстрее, чем JavaGL. Согласно заявлению Microsoft
[6], в OpenGL 1.1 для Microsoft было выполнено множество оптимизаций
.
Рисунок 4 — чайник, визуализированный с помощью JavaGL и
Mesa соответственно.
4. Выводы и дальнейшая работа
JavaGL применяется для разработки нашего VRML-браузера следующего поколения
, работающего через Интернет.
Цель этого браузера VRML — предоставить пользователям
все необходимые функции с серверов, чтобы пользователям
не приходилось устанавливать дополнительное оборудование или программное обеспечение
для 3D-графики. JavaGL соответствует этому требованию
, потому что он полностью реализован на Java
, который разработан для Интернета.
Производительность — серьезная проблема для любых приложений Java
. В будущем мы сосредоточимся на улучшении производительности
путем замены некоторых алгоритмов
более быстрыми.Мы также ожидаем, что производительность
будет улучшена за счет более быстрых интерпретаторов Java
и компиляторов Java.
Javasoft также планирует разработать 3D-графику
API, Java3D. Согласно графику, ранний выпуск
будет объявлен в 1997 году. Мы также отметим разработку Java3D
и изменим нашу стратегию
, чтобы соответствовать тенденции.
Благодарности
Эта работа является частью проекта Multimedia Digital
Classroom (MDC), спонсируемого Национальным научным советом
(NSC) в рамках гранта NSC 85-
2622-E-002-015.
Ссылки
[1] Марк Сигал и Курт Экли, «Графические системы OpenGL
: спецификация (версия
1.1)», Silicon Graphics, Inc., 1996.
Http: //www.sgi .com / Technology / openGL / glspe
c / glspec.html.
[2] Брайан Пол, «Библиотека трехмерной графики Mesa».
http://www.ssec.wisc.edu/~brianp/Mesa.html.
[3] Эндрю С. Гласснер, «Graphics Gems»,
Academic Press, Inc., 1990.
[4] Джеймс Арво, «Graphics Gems II», Academic
Press, Inc., 1991.
[5] Дэвид Кирк, «Graphics Gems III», Academic
Press, Inc., 1992.
[6] «Образец: примечания к выпуску OpenGL 1.1 и компоненты
», Micrrosoft, 1996.
http://www.microsoft.com/kb/articles/q154/8/7
7.htm.
[7] Джеки Найдер, Том Дэвис и Мейсон Ву,
«Руководство по программированию OpenGL», Эддисон —
Уэсли, 1993.
[8] Артур ван Хофф, Сами Шайо и Орка Старбак,
« Застрял на Java », Addision-Wesley, 1996.
[9] «Кафе для Windows 95 / NT», Symantec, 1996.
http://cafe.symantec.com/cafe/.
% PDF-1.3
%
285 0 объект
>
эндобдж
xref
285 136
0000000016 00000 н.
0000003090 00000 н.
0000003233 00000 н.
0000004197 00000 н.
0000004476 00000 н.
0000004560 00000 н.
0000004657 00000 н.
0000004756 00000 н.
0000004877 00000 н.
0000004953 00000 н.
0000004993 00000 п.
0000005107 00000 н.
0000005182 00000 п.
0000005224 00000 н.
0000005300 00000 н.
0000005417 00000 н.
0000005493 00000 п.
0000005621 00000 н.
0000005697 00000 п.
0000005821 00000 н.
0000005941 00000 н.
0000006016 00000 н.
0000006056 00000 н.
0000006201 00000 н.
0000006276 00000 н.
0000006316 00000 н.
0000006463 00000 н.
0000006531 00000 н.
0000006611 00000 н.
0000006700 00000 н.
0000006768 00000 н.
0000006866 00000 н.
0000006934 00000 п.
0000007029 00000 н.
0000007097 00000 п.
0000007192 00000 н.
0000007260 00000 н.
0000007355 00000 н.
0000007423 00000 н.
0000007521 00000 н.
0000007589 00000 н.
0000007690 00000 н.
0000007758 00000 н.
0000007853 00000 п.
0000007921 00000 п.
0000008022 00000 н.
0000008120 00000 н.
0000008188 00000 н.
0000008256 00000 н.
0000008354 00000 н.
0000008422 00000 н.
0000008517 00000 н.
0000008585 00000 н.
0000008680 00000 н.
0000008748 00000 н.
0000008843 00000 н.
0000008911 00000 н.
0000009006 00000 н.
0000009074 00000 н.
0000009142 00000 п.
0000009266 00000 н.
0000009333 00000 п.
0000009507 00000 н.
0000009574 00000 н.
0000009734 00000 н.
0000009801 00000 п.
0000009898 00000 н.
0000009995 00000 н.
0000010107 00000 п.
0000010174 00000 п.
0000010241 00000 п.
0000010355 00000 п.
0000010484 00000 п.
0000010551 00000 п.
0000010618 00000 п.
0000010748 00000 п.
0000010815 00000 п.
0000010927 00000 п.
0000010994 00000 п.
0000011061 00000 п.
0000011128 00000 п.
0000011260 00000 п.
0000011327 00000 п.
0000011471 00000 п.
0000011567 00000 п.
0000011634 00000 п.
0000011799 00000 п.
0000011866 00000 п.
0000011993 00000 п.
0000012086 00000 п.
0000012176 00000 п.
0000012240 00000 п.
0000012359 00000 п.
0000012423 00000 п.
0000012542 00000 п.
0000012606 00000 п.
0000012708 00000 п.
0000012772 00000 п.
0000012875 00000 п.
0000012939 00000 п.
0000013063 00000 п.
0000013130 00000 н.
0000013194 00000 п.
0000013261 00000 п.
0000013325 00000 п.
0000013419 00000 п.
0000013527 00000 п.
0000013594 00000 п.
0000013704 00000 п.
0000013768 00000 п.
0000013832 00000 п.
0000013873 00000 п.
0000013913 00000 п.
0000013954 00000 п.
0000014020 00000 п.
0000014143 00000 п.
0000014190 00000 п.
0000014212 00000 п.
0000014496 00000 п.
0000015615 00000 п.
0000016063 00000 п.
0000016085 00000 п.
0000016337 00000 п.
0000016358 00000 п.
0000016473 00000 п.
0000016566 00000 п.
0000016616 00000 п.
0000016637 00000 п.
0000016781 00000 п.
0000016804 00000 п.
0000025105 00000 п.
0000025127 00000 п.
0000026199 00000 п.
0000026222 00000 п.
0000003373 00000 н.
0000004175 00000 п.
трейлер
]
>>
startxref
0
%% EOF
286 0 объект
>
эндобдж
287 0 объект
Va
Руководство для начинающих программистов по Java: Параметры 3D-графики Java
Есть несколько подходов к созданию трехмерной графики с помощью Java.К сожалению, «стандартного» способа нет. Ядро Java не включает трехмерную графику в текущих версиях (Java SE 5 и 6). Предстоящая новая версия (SE 7) также не включает, хотя она предназначена для включения модульной системы, которая будет загружать компоненты Java, которых еще нет в системе, поскольку они требуются. Скорее всего, основные API-интерфейсы Java 3D воспользуются этим.
Способы получения трехмерной графики в программе на Java:
1. Кодируйте сами
Вы можете написать свои собственные процедуры трехмерной графики на стандартной Java.Это избавляет тех, кто запускает ваши программы, от необходимости получать надстройки к своей Java для запуска ваших программ. Это также означает, что вы действительно будете знать, что происходит в вашем 3D-коде.
Однако это, вероятно, не будет эффективным методом для вас, если вы хотите писать программы с очень сложным 3D или вам нужна высокая производительность.
2. JOGL
JOGL — это низкоуровневый набор API для доступа к OpenGL в системе, в которой выполняется программа. Runescape использует это. Если вы хотите научиться программировать 3-D так, как это делают большинство профессионалов, и не боитесь изучать всевозможные технические аспекты трехмерной графики, чтобы достичь этого, тогда JOGL может быть для вас.
Если вы хотите придерживаться объектно-ориентированного мышления, подобного Java, или не хотите слишком глубоко вникать в основную технологию трехмерной графики только для того, чтобы получить изображение на экране, то JOGL, вероятно, не для вас.
3. LWJGL
Еще одно сокращение, еще одна низкоуровневая библиотека, такая как JOGL. LWJGL ориентирован на разработку игр, включая поддержку оборудования, такого как геймпады и контроллеры, в дополнение к поддержке трехмерной графики. Что касается графики, он имеет те же преимущества и недостатки, что и JOGL.
Если бы я собирался сразу начать использовать другие возможности LWJGL, я бы начал с него, а не с JOGL. Если бы я сначала сосредоточился на изучении программирования 3D-графики с помощью OpenGL, например, используя «Красную книгу» для OpenGL, я бы начал с JOGL, а затем перешел к LWJGL, если бы я чувствовал, что это будет полезно.
4. Java3D
Это высокоуровневый Java API, использующий объектно-ориентированный способ создания трехмерной графики. Он придерживается того же подхода к работе, что и остальная часть Java.Он позволяет легко создавать 3D-объекты и размещать их в сценах для отображения. Если вы новичок в 3D, вероятно, это место для начала обучения.
Чтобы использовать его, вам необходимо установить его в вашей системе. Кроме того, он должен быть у всех, кто хочет запускать ваши программы Java3D.
Бинарные файлы Java 3D для различных компьютерных систем доступны для загрузки.
Хороший сайт сообщества для получения дополнительной информации о создании трехмерной графики с помощью Java — не важно, как вы хотите их делать — это j3d.орг.
Рефакторинг 1 Реорганизованная структура KGPJ: пример Bouncy Balls 1 Программирование KGPJ и 3D 1 Ссылки по темеРодственная математика |
Видео-лекцииЯ собираю для этого курса несколько видеолекций, начиная с уроков по рефакторингу. Вот два видеоролика, которые объясняют, что мы будем делать с программированием Killer Game на Java. ЗагрузкиВам также может потребоваться загрузить и настроить Java3D. См. Настройка Java3D. Список литературы
|
Компьютерная графика 3D-графика — javatpoint
Трехмерные преобразования являются расширениями двумерных преобразований.В 2D используются две координаты, то есть x и y, тогда как в 3D используются три координаты x, y и z.
Для трехмерных изображений и объектов необходимы трехмерные преобразования. Это переводы, масштабирование и вращение. Их также называют, поскольку основные преобразования представлены с помощью матрицы. Более сложные преобразования обрабатываются с помощью матрицы в 3D.
В 2D можно отображать двухмерные объекты. Как гистограмма, круговая диаграмма, графики. Но еще некоторые природные объекты можно представить в 3D.Используя 3D, мы можем видеть разные формы объекта в разных сечениях.
В 3D, когда выполняется перенос, нам также нужны три фактора для вращения, это составляющая трех вращений. Каждый может быть выполнен по любым трем декартовым осям. В 3D мы также можем представить последовательность преобразований в виде единой матрицы.
Компьютерная графика использует САПР. CAD позволяет манипулировать компонентами машин в 3-х измерениях. Также проводится исследование автомобильных кузовов, деталей самолетов.Все эти действия требуют реализма. Для реалистичности требуется 3D. В производстве реалистичной 3D сцены из 2D сложно. Это требует трех измерений, то есть глубины.
3D геометрия
Трехмерная система имеет три оси x, y, z. Ориентация трехмерной системы координат бывает двух типов. Правосторонняя система и левосторонняя система.
В системе правой руки большой палец правой руки указывает на положительное направление по оси Z, а большой палец левой руки указывает на два отрицательных направления.На следующем рисунке показана правосторонняя ориентация куба.
Использование правой системы координат углов A, B, C, D куба
Точка A x, y, z
Точка B x, y, 0
Точка C 0, y, 0
Точка D 0, y, z
Реализм в 3D: Трехмерные объекты созданы с использованием компьютерной графики. Техника, используемая для двумерного отображения трехмерных объектов, называется проекцией.Доступны несколько типов проекции, т. Е.
- Параллельное проецирование
- Перспективная проекция
- Ортографическая проекция
1. Параллельная проекция: В этой проекции точка на экране идентифицируется в пределах точки трехмерного объекта линией, перпендикулярной экрану дисплея. Архитектор
Чертеж, т.е. план, вид спереди, вид сбоку, возвышение — это не что иное, как линии параллельных проекций.
2. Перспективная проекция: Эта проекция имеет свойство, которое дает представление о глубине. Чем дальше объект от зрителя, тем меньше он будет казаться. Все линии в перспективной проекции сходятся в центральной точке, называемой центром проекции.
3. Ортографическая проекция: Простейший вид проекции. В этом случае мы берем вид сверху, снизу и сбоку, выделяя из объекта параллельные линии.
Трехмерные модели
Методы создания различных изображений твердого объекта зависят от типа объекта.Для просмотра трехмерных объектов доступны два метода просмотра.
- Геометрия: Это связано с измерениями. Измерение — это положение точки относительно начала координат или размеров объекта.