使用Java3D實現三維圖像
Java3D用其自己定義的場景圖和觀察模式等技術構造了3D的上層結構,實現了在Java平臺使用三維技術。本文在原理上著重介紹Java3D特有的兩個重要概念:場景圖(Scene Graph)、觀察模式(View Model)。在接口使用上的介紹分為兩部分:實例說明如何使用Java3D接口;說明如何將Java3D技術與Java原有的Web技術(JSP、Serverlet)相結合,在網頁上實現三維顯示。
1. 關于Java3D
1.1 Java3D簡介
Java3D API是Sun定義的用于實現3D顯示的接口。3D技術是底層的顯示技術,Java3D提供了基于Java的上層接口。Java3D把OpenGL和DirectX這些底層技術包裝在Java接口中。這種全新的設計使3D技術變得不再繁瑣并且可以加入到J2SE、J2EE的整套架構,這些特性保證了Java3D技術強大的擴展性。
Java3D建立在JAVA2(JAVA1.2)基礎之上,JAVA語言的簡單性使JAVA3D的推廣有了可能。它實現了以下三維顯示能夠用到的功能:
生成簡單或復雜的形體(也可以調用現有的三維形體)
使形體具有顏色、透明效果、貼圖。
在三維環境中生成燈光、移動燈光。
具有行為的處理判斷能力(鍵盤、鼠標、定時等)。
生成霧、背景、聲音。
使形體變形、移動、生成三維動畫。
編寫非常復雜的應用程序,用于各種領域如VR(虛擬現實)。
J2SE在其標準開發包中并不提供Java3D的API,Java3D是一個獨立的可選組件,可以單獨下載。Java3D現在(截止到2003年5月)提供的正式版本是1.3.0,可以在 http://java.sun.com/products/java-media/3D/download.html 下載該開發工具包。
Java3D 1.3有7個不同的可下載版本:
Java3D for Windows(DirectX version)SDK for JDK(include Runtime);
Java3D for Windows(OpenGL version)SDK for JDK(include Runtime);
Java3D for Solaris/SPARC Runtime for JDK(include Runtime);
Java3D for Windows(DirectX version)Runtime for JRE;
Java3D for Windows(OpenGL version)Runtime for JRE;
Java3D for Solaris/SPARC SDK for JRE;
Java3D for Solaris Runtime 64 bit support;
其中前三個版本是開發包。第4、5、6個版本是Java3D運行期支持程序包。最后一個是支持Solaris 64 bit操作平臺運行Java3D的程序包。前三個的開發包包含了各自對應的運行期支持包。Java語言本身具有跨平臺特性,無論使用上述哪個版本的開發包,概念和實現代碼都會保持完全一致。這里我們使用Java3D for Windows(OpenGL version)SDK for JDK(include Runtime);版本作為我們討論、實現Java3D的工具包。注意在安裝此版本SDK前要保證下列環境:
Java 2 (Runtime or SDK) version 1.3.1 或更后的版本
OpenGL 1.1 或更后的版本,并且是Microsoft支持的顯卡廠商
Windows NT 4.0 only: Service Pack 3 或更后的版本(Window2000、WindowXP)
1.2 Java3D與其他三維技術的比較
JAVA3D可應用在三維動畫、三維游戲、機械CAD等多個領域。但作為三維顯示實現技術,它并不是唯一選擇而且是一個新面孔。在Java3D之前已經存在很多三維技術,這些三維技術在實現的技術、使用的語言以及適用的情況上各有不同,我們主要介紹與Java3D又密切關系的三種技術:OpenGL、DIRECT3D、VRML
OpenGL是業界最為流行也是支持最廣泛的一個底層3D技術,幾乎所有的顯卡廠商都在底層實現了對OpenGL的支持和優化。OpenGL同時也定義了一系列接口用于編程實現三維應用程序,但是這些接口使用C(C++)語言實現并且很復雜。掌握針對OpenGL的編程技術需要花費大量時間精力。
DIRECT3D是Microsoft公司推出的三維圖形編程API,它主要應用于三維游戲的編程。眾多優秀的三維游戲都是由這個接口實現。與OpenGL一樣,Direct3D的實現主要使用C++語言。
VRML2.0(VRML97)自1997年12月正式成為國際標準之后,在網絡上得到了廣泛的應用,這是一種比BASIC、JAVASCRIPT等還要簡單的語言。腳本化的語句可以編寫三維動畫片、三維游戲、計算機三維輔助教學。它最大的優勢在于可以嵌在網頁中顯示,但這種簡單的語言功能較弱(如目前沒有形體之間的碰撞檢查功能),與JAVA語言等其它高級語言的連接較難掌握,因而逐漸被淹沒在競爭激烈的網絡三維技術中。
表1是Java3D與其它三維技術的比較圖,可以從中直觀的看出他們相互間的區別:
技術 | 實現層次 | 開發技術(難度) | 擴展性 | 最適合應用領域 |
Java3D | 中層(JVM) | Java(較易) | J2SE標準擴展(好) | 網上三維顯示實現… |
OpenGL | 底層(顯卡) | CC++(難) | 各大廠商支持(較好) | 三維設計軟件… |
Direct3D | 底層(操作系統) | C++(較難) | Windows平臺(差) | 三維游戲… |
VRML | 上層(網頁) | 標記語言(容易) | 安裝插件支持(一般) | 網上虛擬現實… |
表1:3D技術對招表