2009-10-24 12 views
9

Mam zamiar napisać grę Java 3D, która będzie działać zarówno na PC, jak i na Androidzie. Niestety wygląda na to, że nie ma wspólnego API OpenGL dla obu platform.Pisanie przenośnej aplikacji Java za pomocą JOGL i Androida OpenGL

Czy interfejsy API różnią się znacząco? Czy istnieje sposób, w jaki mogę użyć tego samego kodu 3D w obu wersjach? Czy to dobry pomysł?

+0

Ładne pytanie - przenoszenie na platformy mobilne wciąż nie jest rzeczywistością. – whatnick

+0

Spróbuj użyć Qt. Jest wieloplatformowy i działa w systemach Windows, Mac OS X, Linux, iOS, Android, BlackBerry, Windows RT i (wkrótce) Windows Phone.Zapewnia minimalny zestaw funkcji OpenGL kompatybilnych na wszystkich platformach, ale można również użyć funkcji OpenGL specyficznych dla każdej platformy (na przykład pełnej wersji OpenGL na komputerach). – trusktr

Odpowiedz

10

Android obsługuje OpenGL ES 1.0, który pokrywa się z OpenGL 1.3, więc powinno to być możliwe, ale nie jest to tak proste, jak zwykłe zastąpienie plików jar w środowisku wykonawczym.

Dobrze jest spróbować wykorzystać jak najwięcej aplikacji na obu platformach. W każdym razie na ogół dobrą praktyką jest izolowanie reszty kodu od zewnętrznych zależności, takich jak OpenGL, nawet jeśli nie potrzebujesz specjalnej obsługi OpenGL ES. Nigdy nie wiesz, w jakim interfejsie API/platformie możesz przenieść swoją aplikację w przyszłości.

Dostępne są 2 opcje.

Pierwsza polega na ukryciu implementacji OpenGL za interfejsem używanym przez resztę aplikacji, a następnie w osobnych implementacjach Jogl i Androide. W zależności od platformy, z której korzystasz, możesz następnie wprowadzić poprawne wdrożenie w środowisku wykonawczym, używając fabrycznego wzorca.

Ponieważ OpenGL ES i OpenGL są bardzo podobne, wysiłek wymagany do ich utrzymania nie powinien być zbyt wysoki, zapewniając trzymanie się typowych funkcji.

Inną opcją jest próba użycia Jogl2 z obsługą profili. Wygląda na to, że zapewniają dokładnie to, czego potrzebujesz, ale Jogl2 jest nadal w wersji beta.

Dno to strona opowiada trochę o profilach: http://kenai.com/projects/jogl/pages/FAQ

Profile pozwalają aplikacjom Java być napisane w sposób, który zapewnia kompatybilność z wieloma wersjami OpenGL w tym samym czasie. Ponieważ OpenGL ES (GL dla systemów wbudowanych) ma nakładające się funkcje z samym OpenGL, otworzyło możliwość dodawania nawet Profili, które łączą implementacje desktopowe i osadzone.

Możesz przeczytać tę http://michael-bien.com/mbien/entry/jogl_2_opengl_profiles_explained, aby uzyskać więcej informacji o profilach.

+0

Bardzo dobrze zbadana odpowiedź. Jest ładna aplikacja OS JOGL o nazwie worldwind, nad którą pracuję i zapłaciłabym za jej uruchomienie na systemie Android. – whatnick

1

Istnieje rzeczywiście sporo różnic między java3d a Androidem apl opengl. Pierwszy java3d jest abstrakcją wyższego poziomu w 3d. I nawet jeśli używałbyś czegoś takiego jak JOGL, to byłyby pewne różnice w api. Najlepszym wyjściem byłoby wyodrębnienie rzeczywistej implementacji rysowania 3D w bazie kodu, można podzielić się resztą logiki, ale następnie mieć specyficzny dla platformy kod do obsługi rysunku opengl/3d.

4

Projekt jest gotowy. Okazało się, że API różnią się nieco, ale funkcjonalnie istnieje wspólna część. W końcu napisaliśmy prosty preprocesor, który przekonwertował kod JOGL na wersję ES i zautomatyzował konwersję za pomocą Eclipse.

+2

udostępniłbyś preprocesor? – Rom1

+0

Proszę udostępnić preprocesor. Mam do czynienia z tym samym problemem – jmishra

+2

Nie jestem pewien, czy to pomaga, prawdopodobnie można uzyskać przy użyciu GPC cpp. W każdym razie oto nasz projekt (Netacka 3D): http://students.mimuw.edu.pl/~pm262952/netacka/ Oto preprocesor (w języku Python): http://pastebin.com/iPjDHiTR przykładowy plik źródłowy: http://pastebin.com/vwHGcyC0 – hmp

1

Po połączeniu JOGL-ES z JOGL 2.x kilka lat temu, można teraz używać JOGL zarówno w środowiskach stacjonarnych, jak i mobilnych (Android).

Powiązane problemy