1. 程式人生 > >《jogl簡明教程》學習筆記1

《jogl簡明教程》學習筆記1

jogl的資料是在是太少了,找了將近一個月,幾乎看到的都是《jogl簡明教程》,中文的教程完全就沒有 是在沒有辦法只能硬著頭皮用這本書了。不過在看jogl之前看看opengl的書(推薦《紅寶書》)還是非常有用的 這裡對《jogl簡明教程》書裡的內容做一些學習記錄 首先建立一個視窗,opengl的繪圖需要一個視窗,c裡面有glut,java目測只能自己寫(我看nehe的教程也是自己寫的)。 原書用的是awt的Frame,我自己改成了JFrame。 原書程式碼放在最後 這段程式碼是書裡第一個程式,算是jogl的HelloWorld! 首先用awt(swing)建立了視窗,同時繼承了監聽藉口 然後把畫布新增到frame裡面,這個畫布會隨著frame改變而改變 init用於初始化 display用於繪製圖形 reshap當視窗狀態改變是執行 displaychanged當顯示模式或者顯示裝置改變是執行,通常不使用 整體感覺和c語言下的opengl沒有太大變化。 p.s:jogl下的方法大多數都有gl字首 原書程式碼 import java.awt.*; // JOGL: OpenGL functions import javax.media.opengl.*; import javax.swing.JFrame; public class J1_0_Point extends JFrame implements     GLEventListener {   static int HEIGHT = 600, WIDTH = 600;   static GL gl; //interface to OpenGL   static GLCanvas canvas; // drawable in a frame   static GLCapabilities capabilities;   public J1_0_Point() {     //1. specify a drawable: canvas     capabilities = new GLCapabilities();     canvas = new GLCanvas();      //2. listen to the events related to canvas: reshape     canvas.addGLEventListener(this);     //3. add the canvas to fill the Frame container     add(canvas, BorderLayout.CENTER);     //4. interface to OpenGL functions     gl = canvas.getGL();   }   public static void main(String[] args) {    J1_0_Point frame = new J1_0_Point();    //5. set the size of the frame and make it visible    frame.setSize(WIDTH, HEIGHT);    frame.setVisible(true);  }  // called once for OpenGL initialization  public void init(GLAutoDrawable drawable) {    //6. specify a drawing color: red    gl.glColor3f(1.0f, 0.0f, 0.0f);  }  // called for handling reshaped drawing area  public void reshape(      GLAutoDrawable drawable,      int x,      int y,      int width,      int height) {      WIDTH = width; // new width and height saved      HEIGHT = height;    //7. specify the drawing area (frame) coordinates    gl.glMatrixMode(GL.GL_PROJECTION);    gl.glLoadIdentity();    gl.glOrtho(0, width, 0, height, -1.0, 1.0);  }  // called for OpenGL rendering every reshape  public void display(GLAutoDrawable drawable) {    //8. specify to draw a point    //gl.glPointSize(10);    gl.glBegin(GL.GL_POINTS);    gl.glVertex2i(WIDTH/2, HEIGHT/2);    gl.glEnd();  }  // called if display mode or device are changed  public void displayChanged(      GLAutoDrawable drawable,      boolean modeChanged,      boolean deviceChanged) {  } }