3Dによる表示は様々なところに使われています。

映画やコマーシャル,ゲームなどでは3D CGは当たり前のように使われています。でも,「そんなのはごくごく一部の分野で,仕事には全く関係ない」と思っている方も多いのではないでしょうか。

たぶん,仕事で一番多く使用されている3Dの表示は表計算ソフトのグラフでしょう。それ以外で,3Dといっても思い浮かぶものはないかもしれません。

だからといって3Dによる描画を使用していないかというと,そんなことはありません。意識はしていないかもしれませんが,今後は3Dによる表示は欠かせないものになってきています。

例えば,Windows Vistaはどうでしょう。

Windows Vistaのデスクトップ環境であるWindows Aero(以前はAero Glassという名前だったのですが,どこかで聞いたことがあるような名前ですね)では,3Dによる効果が様々なところに使用されています。Alt+TABキーでアプリケーションを切り替えると,ウィンドウが斜めに立った状態になるのを見た方もあるのではないでしょうか。

そのほかにも,半透明などの効果がふんだんに使われています。

他の例も見てみましょう。SUSE Linuxで使用されているXGLは,仮想デスクトップの切り替えを3D的に行うといった効果を使用できます。ちょうどサイコロの各面にデスクトップが貼りつけられていて,それがグルッと90度回転して切り替えを行うような感じです。

もちろん,デスクトップのすべての要素を3Dで表示するProject Looking Glassも忘れてはいけません。

このようなデスクトップ環境では,従来からの2Dの描画も3Dとして扱われます。3Dとして扱うことで,半透明や画面奥方向への移動などの効果を容易に行うことができます。

ここでポイントになるのが,3Dがユーザー・インタフェースの向上のために使われているということです。

デスクトップ環境がこのような流れになっているのに,個々のアプリケーションがそのままというのも寂しい話です。ユーザー・インタフェースを使いやすくする手法の一つとして,3Dを操れるようにしておくことが必要になるかもしれません。

それでは,Javaで3Dの描画を扱うにはどうすればいいでしょう。

  1. 独自に3D描画ライブラリを作成する
  2. オープンソースや製品として流通している描画ライブラリを使用する
  3. OpenGLを使用する
  4. Java 3Dを使用する

独自のライブラリなどを使用してもかまいませんが,米Sun Microsystemsが公式に開発しているものを選ぶとすれば,3.もしくは4.になります。

3.のOpenGLは,汎用的に使用できる3Dの描画ライブラリです。3D描画ライブラリとしては,Windowsで使用されるDirectXと双璧をなしています。主にUNIXやMacで使用されていますが,Windowsでも使用することは可能です。

OpenGLをJavaから扱うようにするライブラリにはいくつかありますが,Sun Microsystemsが開発を行っているのが後述するJOGLです。

OpenGLは3D描画ライブラリとしては抽象度が低く,ハードウエアに近いライブラリです。これに対し抽象度が高いライブラリの代表格がJava 3Dです。

Java 3Dは,3Dで表現する世界をシーングラフと呼ばれるグラフ構造で表すことを特徴としています。

Java 3Dもとても興味深いライブラリなのですが,今回はよりプリミティブなOpenGLを取りあげましょう。Java 3Dについては,いずれ機会があったら取りあげてみたいと思います。

OpenGLとは

OpenGLはもともと米Silicon Graphics(SGI)が自社のコンピュータ用に開発したIRIS GLというライブラリをベースにしています。SGIがCGの分野で一世を風靡していたことをご存じの方も多いと思いますが,その時に使用されていた3D描画のためのライブラリがIRIS GLなのです。

このIRIS GLをベースにして,オープンな規格にしたものがOpenGLです。

OpenGLは現在はOpenGL Architecture Review Board(ARB)によって仕様が策定されています。ARBにはIBM,HP,Sun Microsystemsなどのコンピュータ・メーカーやATI,NVIDIAなどのGPUベンダーがメンバーとして名を連ねています。

OpenGLの現在のバージョンは2.0です。また,OpenGLの派生仕様として,シェーディング言語であるOpenGL Shading Language(GLSL)や,携帯電話などリソースの限られた機器用のOpenGL for Embedded Systems(OpenGL ES)などがあります。

OpenGL ESはPlay Station 3が採用したことがよく知られていますね。

実をいうとすでにJava SEでは描画にOpenGLが使用されています(WndowsではDirectXが使用されています)。とはいうものの,Java SEで公開されているAPIでは3Dの描画を行うことはできません。Java SEでは2Dの描画にOpenGLを使用しているのです。

JavaでOpenGLの3Dの描画を行う場合,最も多く使用されているのがJava Binding for the OpenGL,通称JOGLです。JOGLはJCPのJSR-231で仕様策定されています。今年のJavaOneのJOGLのセッションによると,8月にもFinal Approval Bollotを通過して,正式版がリリースされる予定だそうです。

今月から3カ月間に渡って,JOGLを使用してOpenGLの世界に触れていきましょう。

著者紹介 櫻庭祐一

横河電機の研究部門に勤務。同氏のJavaプログラマ向け情報ページ「Java in the Box」はあまりに有名