PCとAndroidの両方で動作するJava3Dゲームを作成する予定です。残念ながら、両方のプラットフォームに共通のOpenGLAPIがないようです。
APIは大幅に異なりますか?両方のバージョンで同じ3Dコードを使用する方法はありますか?それは良い考えですか?
AndroidはOpenGL1.3と重複するOpenGLES1.0をサポートしているため、これは可能ですが、実行時にjarファイルを置き換えるだけでは簡単ではありません。
両方のプラットフォームでアプリケーションを可能な限り再利用することをお勧めします。とにかく、OpenGL ESのサポートが特に必要ない場合でも、OpenGLなどの外部依存関係から残りのコードを分離することは一般的に良い習慣です。将来、アプリケーションをどのAPI/プラットフォームに移植したいかはわかりません。
利用可能な2つのオプションがあります。
1つ目は、OpenGL実装を、アプリケーションの残りの部分が使用するインターフェースの背後に隠してから、JoglとAndroideの別々の実装を提供することです。実行しているプラットフォームに応じて、ファクトリパターンを使用して実行時に正しい実装をインスタンス化することを選択できます。
OpenGL ESとOpenGLは非常に似ているため、これを維持するために必要な労力は、共通の機能に固執する場合は高すぎないようにする必要があります。
もう1つのオプションは、プロファイルをサポートするJogl2を試して使用することです。これらは必要なものを正確に提供しているように見えますが、Jogl2はまだベータ版です。
このページの下部では、プロファイルについて少し説明しています:http: //kenai.com/projects/jogl/pages/FAQ
プロファイルを使用すると、複数のOpenGLバージョンと同時に互換性を持たせることができる方法でJavaアプリケーションを作成できます。OpenGL ES(組み込みシステムのGL)は、OpenGL自体と重複する機能を備えているため、デスクトップと組み込みの実装を橋渡しするプロファイルを追加する機会が開かれました。
プロファイルの詳細については、このhttp://michael-bien.com/mbien/entry/jogl_2_opengl_profiles_explainedをお読みください。
プロジェクトは終了しました。APIは多少異なることがわかりましたが、機能的には共有部分があります。最終的に、JOGLコードをESバージョンに変換し、Eclipseで変換を自動化する単純なプリプロセッサーを作成しました。
JOGL-ESは数年前にJOGL2.xにマージされたため、デスクトップ環境とモバイル環境(Android)の両方でJOGLを使用できるようになりました。
実際、java3dとandroidopenglapiの間にはかなりの違いがあります。最初のjava3dは、3dの高レベルの抽象化です。また、JOGLのようなものを使用する場合でも、APIにはいくつかの違いがあります。最善の策は、コードベースで実際の3D描画の実装を抽象化することです。残りのロジックを共有できますが、opengl/3d描画を処理するためのプラットフォーム固有のコードを使用できます。