Java 3D API 為 Java 平台提供標準化的 3D 圖形能力,封裝 OpenGL/DirectX 底層實現,支援 J2SE/J2EE 全棧整合。本文系統剖析其兩大核心概念——場景圖與觀察模型,並示範 Applet/JSP/Servlet 整合實戰。
| 技術 | 實現層次 | 開發難度 | 擴展性 | 適用領域 |
|---|---|---|---|---|
| Java 3D | 中層 (JVM) | Java (較易) | J2EE 標準擴展 (優) | Web 3D、企業級視覺化 |
| OpenGL | 底層 (GPU) | C/C++ (難) | 廠商支援 (良) | CAD、科學視覺化 |
| Direct3D | 底層 (OS) | C++ (難) | Windows 綁定 (差) | 3D 遊戲 |
| VRML | 上層 (Web) | 標記語言 (易) | 需外掛 (一般) | 網頁虛擬漫遊 |
Java 3D 採用有向無環樹結構組織 3D 世界:

Java 3D 引入創新的觀察模型,實現「編寫一次,隨處觀察」:

NOMINAL_HEAD:虛擬眼睛對齊物理眼睛位置(預設)NOMINAL_FEET:虛擬雙腳貼地,適合漫遊應用NOMINAL_SCREEN:維持與螢幕固定距離// 初始化宇宙與觀察平台
Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
SimpleUniverse universe = new SimpleUniverse(canvas);
ViewingPlatform vp = universe.getViewingPlatform();
// 設定初始觀察點
Transform3D t = new Transform3D();
t.set(new Vector3d(0, 0, 2.41));
vp.getViewPlatformTransform().setTransform(t);
// 滑鼠軌跡球控制
OrbitBehavior orbit = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ALL);
orbit.setSchedulingBounds(new BoundingSphere(new Point3d(), 100));
vp.setViewPlatformBehavior(orbit);
// 建立場景圖
BranchGroup scene = createSceneGraph();
universe.addBranchGraph(scene);
// HelloUniverse.java (extends Applet)
public void init() {
Canvas3D c = new Canvas3D(config);
add("Center", c);
SimpleUniverse u = new SimpleUniverse(c);
u.addBranchGraph(createSceneGraph());
}
<applet code="HelloUniverse.class" width=256 height=256></applet>
<% float size = 300 * new java.util.Random().nextFloat(); %>
<applet code="HelloUniverse.class" width="<%=size%>" height="<%=size%>"></applet>
每次重新整理頁面,立方體大小隨機變化。

<%@ page import="javax.ejb.*, javax.naming.*, javax.rmi.PortableRemoteObject" %>
<%
Context ctx = new InitialContext();
CustomerHome home = (CustomerHome) PortableRemoteObject.narrow(
ctx.lookup("Customer"), CustomerHome.class);
Customer cust = home.findByPrimaryKey("1000000");
String data = cust.getData();
%>
<applet code="HelloUniverse.class" width=200 height=200>
<param name="Data" value="<%=data%>">
</applet>
願景:衛星地理資料 → EJB 邏輯 → 手機/PDA/車載 GPS 即時 3D 導航;地震等高線 → EJB 3D 轉換 → Web 3D GIS 儀表板。Java 3D + J2EE 讓這一切觸手可及。