跳到主要內容

發表文章

目前顯示的是 三月, 2008的文章

JOGL - Java與OpenGl(四)

準備實戰

當你熟悉了前面的例子以後,我們來畫一張漂亮的圖。

這就是你接下來的程式。請確保你輸入了所有的code到你的編輯器中。調校這些程式可以使你快速地明白它們的工作原理。

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.media.opengl.*; /** * This is a basic JOGL app. Feel free to reuse this code or modify it. * 這是個基礎的JOGL程序,你可以隨意重用該代碼或者修改它。 */ public class SecondJoglApp extends JFrame { public static void main(String[] args) { final SecondJoglApp app = new SecondJoglApp(); // show what we've done // 看一下我們做了什麼 SwingUtilities.invokeLater(new Runnable() { public void run() { app.setVisible(true); } }); } public SecondJoglApp() { // set the JFrame title // 設置JFrame標題 super("Second JOGL Application"); // kill the process when the JFrame is closed // 當JFrame關閉的時候,結束程式 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // only three JOGL lines of code ... and here they are //…

JOGL - Java與OpenGl(三)

一個好用的程式樣板

讓我們繼續來看兩個class,當你對JOGL感到有點頭昏腦脹時,你也許會發現這個程式樣板相當好用。我已經不止一次把它們當成樣板用了。你可以隨意地使用它們。

這個樣板由兩個class組成。第一個是如下所示的SimpleJoglApp,在簡短說明之後,第二個是SimpleGLEventListener。你必須建立兩個class來編譯樣板。主程式如下:

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.media.opengl.*; /** * This is a basic JOGL app. * Feel free to reuse this code or modify it. * 這是個基本的JOGL程式,你可以隨意重用或修改它。 */ public class SimpleJoglApp extends JFrame { public static void main(String[] args) { final SimpleJoglApp app = new SimpleJoglApp(); // show what we've done // 看一下我們做了什麼 SwingUtilities.invokeLater(new Runnable() { public void run() { app.setVisible(true); } }); } public SimpleJoglApp() { // set the JFrame title // 設置JFrame標題 super("Simple JOGL Application"); // kill the process when the JFrame is closed // 當JFrame關閉的時候,結束程式 setDefaultCloseOperation(J…

JOGL - Java與OpenGl(二)

Hello World!

我是一個傳統的人,所以我們理所當然從「Hello World」開始。這個「Hello World」程式將檢驗我們的安裝是否全部或只有一部分安裝正確。回憶一下安裝JOGL的2個部分,分別是jar文件裡的Java Library以及其它的Native code。

以下就是我們的程式:
import javax.media.opengl.*; public class HelloWorld { public static void main (String args[]) { try { System.loadLibrary("jogl"); System.out.println("Hello World! (The native libraries are installed.)"); GLCapabilities caps = new GLCapabilities(); System.out.println("Hello JOGL! (The jar appears to be available.)"); } catch (Exception e) { System.out.println(e); } } }
首先,這個程式測試 Native code 和 Java library 是否已經安裝正確了。只有當jogl.jar和Native code(諸如gluegen-rt.dll或者 jogl.dll)兩者都安裝好了的時候,JOGL才算安裝完全。如果native code不可用,程式會拋出 java.lang.UnsatisfiedLinkError例外。如果classpath裡沒有安裝JAR,程序則根本編譯都過不了。Javac編譯器會報諸如此類的錯「javax.media.opengl Package不存在」。當這個程序編譯通過且運行起來沒有異常的話,你可以繼續學習JOGL了。

(按:已修改為相容JOGL 2008的code)

JOGL - Java與OpenGl(一)

在這篇文章裡,摘錄了《學習Java對於OpenGL的綁定》。作者Gene Davis解釋了如何開始用Java對於OpenGl的綁定開發圖形增強的程式。

這些年來,為了創建一個圖形增強的程式,從而出售給使用各種不同操作系統的用戶,程式員有一個選擇——OpenGL。GL代表圖形庫(graphics library)。OpenGL是SGI(美國圖形工作站生產廠商)的註冊商標。OpenGL顯示了它是一個跨平台的C語言編程API。但是事實上,在程式介面上,它是一個獨立於硬體的規格。

OpenGL用於繪圖,速度非常快。大多數場合下,它使用硬體加速。似乎OpenGL可以實現一切你想要完成的圖形界面。

不幸的是,OpenGL是為C語言而寫的。不得不承認,C語言不是用來編寫複雜應用程式的流行語言。關於OpenGL一個最大的缺點就是:如果你不創建一個視窗(用來把你的圖形放入其中),你就什麼都做不了。但是OpenGL沒有提供給你創建視窗的方法。這使得OpenGL對於初學者來說顯得比較難。

幸運地是,出現了GLUT (OpenGL Utility Toolkit)(OpenGL工具包)。它被用來輕鬆應對視窗、按鈕以及使用者事件。儘管如此,對於想要使用物件導向的程式員來說,學習用C或者C++來寫OpenGL程式仍然是一件痛苦的事。


然後出現了JOGL

Java 也許是最流行的真正物件導向程式語言。有許多用Java去結合OpenGL的嘗試,但是第一個被大家認可並注意的OpenGL的Java綁定 (Java Bindings for OpenGL), 或者稱為JOGL。因為它得到Sun(Java的創建者)和SGI(OpenGL的創建者)的支持。

如今,Sun的遊戲開發小組正在開發JOGL。它以肯·拉塞爾和克里斯·克蘭開發的Jungle開始。拉塞爾是Sun的員工,研發「HotSpot虛擬機器」,擁有多年的3D經驗。克蘭則研發「荒謬的遊戲」,對3D圖學也相當有經驗。

我個人對他們以及所有其它在JOGL上工作的人表示感謝。曾經有許多人嘗試通過友好的Java API來使用OpenGL——其中包括Java 3D, OpenGL for Java Technology (gl4java)(給Java技術的OpenGL),Lightweight Java Game Library (LWJGL)(輕量級的Ja…