Написание переносимого Java-приложения с использованием JOGL и Android OpenGL - PullRequest
9 голосов
/ 24 октября 2009

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

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

Ответы [ 4 ]

10 голосов
/ 27 октября 2009

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 для получения дополнительной информации о профилях.

4 голосов
/ 31 августа 2010

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

1 голос
/ 19 июля 2014

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

1 голос
/ 25 октября 2009

На самом деле есть большая разница между java3d и Android OpenGL API. Во-первых, java3d - это абстракция более высокого уровня в 3d. И даже если бы вы использовали что-то вроде JOGL, в API были бы некоторые различия. Лучше всего было бы абстрагировать фактически реализованную реализацию 3D-рисования в базе кода, вы могли бы поделиться остальной логикой, но затем иметь специфичный для платформы код для обработки opengl / 3d-рисунка.

...