《jogl簡明教程》學習筆記1
阿新 • • 發佈:2019-02-19
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) {
}
}