#眉標=Java #副標=Java SE 6.0系列(5) #大標=初探Java Bindings for OpenGL #作者=文/黃嘉輝 == <反黑>=========== JAVA_EXT=C:\jdk1.6.0\jre\lib\ext CLASSPATH=%CLASSPATH%;%JAVA_EXT%\jogl.jar;%JAVA_EXT%\gluegen-rt.jar PATH=%PATH%;%JAVA_EXT%\jogl.dll;%JAVA_EXT%\gluegen-rt.dll java.library.path=%JAVA_EXT% ================ ============= 程式1 #include #include /* 主程式 */ void main(void){ /* 設定顯示模式 */ glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /* 建立視窗 */ glutCreateWindow("GLRect"); /* 定義繪圖函式為自定之RenderScene */ glutDisplayFunc(RenderScene); /* 定義當視窗大小改變時所呼叫之函式 */ glutReshapeFunc(ChangeSize); /* 自定函式以初始化環境 */ Initialize(); /* 進入OpenGL迴圈 */ glutMainLoop(); } /* 初始化環境 */ void Initialize(void){...} /* 繪圖 */ void RenderScene(void){...} /* 當視窗大小改變時 */ void ChangeSize(GLsizei w, GLsizei h){...}================ ==<反黑>=========== public void init(GLAutoDrawable drawable) ================ ==<反黑>=========== public void display(GLAutoDrawable drawable) ================ ==<反黑>=========== public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) ================ ==<反黑>=========== public void displayChanged(GLAutoDrawable drawable, boolean mode, boolean device) ================ ============= 程式2 import java.awt.*; import java.awt.event.*; import javax.swing.*; // JOGL import javax.media.opengl.*; import com.sun.opengl.util.*; public class JOGLDemo extends JFrame implements GLEventListener { public static void main(String[] args){ new JOGLDemo(); } // 建構函式 public JOGLDemo(){ ... // 建立GLJPanel物件 GLJPanel glpanel = new GLJPanel(); // 註冊GLEventListener glpanel.addGLEventListener(this); // 將GLJPanel物件加入JFrame中 this.add(glpanel); // 設定視窗的大小 this.setSize(300, 300); // 顯示視窗 this.setVisible(true); } // 實作GLEventListener介面之方法 // 初始化JOGL public void init(GLAutoDrawable drawable){ ... } // 繪製圖形 public void display(GLAutoDrawable drawable){ ... } // 當視窗大小改變時 public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height){ ... } // 當顯示模式或裝置改變時 public void displayChanged( GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged){ } } ================ ============= 程式3 // 初始化JOGL public void init(GLAutoDrawable drawable){ // 建立GL物件 GL gl = drawable.getGL(); // 以黑色清除背景 gl.glClearColor(...); ... } ================ ============= 程式4 // 繪製圖形 public void display(GLAutoDrawable drawable){ // 建立GLUT物件 GLUT glut = new GLUT(); // 繪製實體環形曲面 glut.glutSolidTorus(...); ... } // 當視窗大小改變時 public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height){ // 建立GLU物件 GLU glu = new GLU(); // 設定透視度 glu.gluPerspective(...); ... } ================ ============= 程式5 Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no jogl in java.library.path================ ============= 程式6 java -Djava.library.path=C:\jdk1.6.0\jre\lib\ext -Dsun.java2d.noddraw=true JOGLDemo================ ==參考資料=========== 1. OpenGL:http://www.opengl.org/ 2. JOGL:https://jogl.dev.java.net/ 3. JOAL:https://joal.dev.java.net/ 4. GlueGen:https://gluegen.dev.java.net/ 5. LWJGL:http://lwjgl.org/ https://jogl.dev.java.net/ 6. Delphi OpenGL Toolkit:http://www.delphi3d.net/dot/ 7. Fortran 90 Bindings for OpenGL:http://math.nist.gov/f90gl/ 8. Perl OpenGL: http://graphcomp.com/opengl/ 9. Python OpenGL Binding:http://pyopengl.sourceforge.net/ 10. ruby-opengl:http://ruby-opengl.rubyforge.org/ 11. OpenGL 1.1 ActiveX Control:http://www.weihenstephan.de/~syring/ActiveX/ ================ ==作者簡介=========== 黃嘉輝 U. of Wisconsin – Madison碩士畢業,現為交通大學資訊管理研究所博士後選人。曾任職於復華投信資訊部經理、聯華電子資訊部電子商務正工程師、朗訊科技CIO System Specialist等職位。現於University of Michigan, Ann Arbor擔任研究學者。 ================