Написание переносимого Java-приложения с использованием JOGL и Android OpenGL

Я планирую написать Java 3D-игру, которая будет работать как на ПК, так и на Android. К сожалению, похоже, что для обеих платформ нет общего API OpenGL.

Знают ли различия в API? Есть ли способ использовать один и тот же 3D-код в обеих версиях? Это хорошая идея?

Solutions Collecting From Web of "Написание переносимого Java-приложения с использованием JOGL и Android OpenGL"

Android поддерживает OpenGL ES 1.0, который перекрывается с OpenGL 1.3, поэтому это должно быть возможно, но это не так просто, просто заменив файлы jar во время выполнения.

Рекомендуется попробовать как можно больше использовать приложение на обеих платформах. В любом случае, как правило, хорошей практикой является выделение остального кода из внешних зависимостей, таких как OpenGL, даже если вам не нужна поддержка OpenGL ES. Вы никогда не знаете, какой API / платформу вы, возможно, захотите портировать свое приложение в будущем.

Доступны 2 варианта.

Первый заключается в том, чтобы скрыть реализацию OpenGL за интерфейсом, который использует остальная часть вашего приложения, а затем предоставить отдельные реализации Jogl и Androide. В зависимости от того, на какой платформе вы работаете, вы можете выбрать, чтобы внедрить правильную реализацию во время выполнения с использованием заводского шаблона.

Поскольку OpenGL ES и OpenGL очень похожи, усилия, необходимые для поддержания этого, не должны быть слишком высокими, если вы придерживаетесь общих функций.

Другой вариант – попытаться использовать Jogl2, который поддерживает профили. Кажется, они обеспечивают именно то, что вам нужно, но Jogl2 все еще находится в стадии бета-тестирования.

В нижней части этой страницы немного рассказывается о профилях: http://kenai.com/projects/jogl/pages/FAQ

Профили позволяют писать Java-приложения таким образом, чтобы одновременно поддерживать совместимость с несколькими версиями OpenGL. Поскольку OpenGL ES (GL для встроенных систем) имеет перекрывающиеся функциональные возможности с OpenGL, он открыл возможность добавления даже профилей, которые объединяют настольные и встроенные реализации.

Вы можете прочитать это http://michael-bien.com/mbien/entry/jogl_2_opengl_profiles_explained для получения дополнительной информации о профилях.

Проект завершен. Оказалось, что API отличаются друг от друга, но функционально есть общая часть. В итоге мы создали простой препроцессор, который преобразовал код JOGL в ES-версию и автоматизировал преобразование с помощью Eclipse.

На самом деле существует довольно большая разница между java3d и android opengl api. Первый java3d – это абстракция более высокого уровня на 3d. И даже если бы вы использовали что-то вроде JOGL, в Api были бы некоторые различия. Лучше всего было бы абстрагироваться от реализации 3d-чертежа на самом деле в базе кода, вы могли бы поделиться остальной частью логики, но затем иметь конкретный код платформы для обработки чертежа opengl / 3d.

Поскольку JOGL-ES был объединен с JOGL 2.x несколько лет назад, теперь вы можете использовать JOGL как в настольных, так и в мобильных средах (Android).