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

你可能感兴趣的:(JAVA)