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) {
}
}