Интернет магазин китайских планшетных компьютеров



Компьютеры - Java OpenGL - Взаимодействие Java 2D и OpenGL

10 июня 2011


Оглавление:
1. Java OpenGL
2. Состояние разработки и стандартизация
3. Взаимодействие Java 2D и OpenGL
4. Инсталляция, подключение и использование



Начиная с Java Standard Edition версии 1.6, Java 2D API и OpenGL могут взаимодействовать посредством JOGL:

  • наложение компонентов Swing на поверхность OpenGL
  • осуществление вывода средствами OpenGL на поверхности элементов Java 2D)
  • использование 3D графики везде, где могут использоваться графические компоненты Swing
  • осуществление вывода средствами Java 2D на поверхности OpenGL

3D Tetrahedron Example

Программа показывает пример простейшей отрисовки тетраэдра с использованием JOGL.

Класс JavaRenderer — использует GLAutoDrawable для отрисовки 3D-сцены.

 import javax.media.opengl.GL;
 import javax.media.opengl.GLEventListener;
 import javax.media.opengl.GLAutoDrawable;
 import javax.media.opengl.glu.GLU;
 import java.awt.event.KeyEvent;
 import java.awt.event.KeyListener;
 
 public class JavaRenderer 
 implements GLEventListener, KeyListener {
    private float rotateT = 0.0f;
    private static final GLU glu = new GLU;
 
    public void display {
        final GL gl = gLDrawable.getGL;
        gl.glClear;
        gl.glClear;
        gl.glLoadIdentity;
        gl.glTranslatef;
 
        gl.glRotatef;
        gl.glRotatef;
        gl.glRotatef;
        gl.glRotatef;
 
        gl.glBegin;
 
        // Front
        gl.glColor3f; 
        gl.glVertex3f;
        gl.glColor3f; 
        gl.glVertex3f;
        gl.glColor3f; 
        gl.glVertex3f;
 
        // Right Side Facing Front
        gl.glColor3f; 
        gl.glVertex3f;
        gl.glColor3f; 
        gl.glVertex3f;
        gl.glColor3f; 
        gl.glVertex3f;
 
        // Left Side Facing Front
        gl.glColor3f; 
        gl.glVertex3f;
        gl.glColor3f; 
        gl.glVertex3f;
        gl.glColor3f; 
        gl.glVertex3f;
 
        // Bottom
        gl.glColor3f; 
        gl.glVertex3f;
        gl.glColor3f; 
        gl.glVertex3f;
        gl.glColor3f; 
        gl.glVertex3f;
 
        gl.glEnd;
 
        rotateT += 0.2f;
    }
 
    public void displayChanged(GLAutoDrawable gLDrawable, 
      boolean modeChanged, boolean deviceChanged) {
    }
 
    public void init {
        final GL gl = gLDrawable.getGL;
        gl.glShadeModel;
        gl.glClearColor;
        gl.glClearDepth;
        gl.glEnable;
        gl.glDepthFunc;
        gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, 
        GL.GL_NICEST);
        gLDrawable.addKeyListener;
    }
 
    public void reshape(GLAutoDrawable gLDrawable, int x, 
    int y, int width, int height) {
        final GL gl = gLDrawable.getGL;
        if {
            height = 1;
        }
        final float h = width / height;
        gl.glMatrixMode;
        gl.glLoadIdentity;
        glu.gluPerspective;
        gl.glMatrixMode;
        gl.glLoadIdentity;
    }
 
    public void keyPressed {
        if == KeyEvent.VK_ESCAPE) {
            JavaDia.bQuit = true;
            JavaDia.displayT = null;
            System.exit;
        }
    }
 
    public void keyReleased {
    }
 
    public void keyTyped {
    }
 }

JavaDia класс—Основной класс отвечающий за вызов выполнение JavaRenderer. Код рисует 3D-сцену в GLCanvas'е.

 import javax.media.opengl.GLCanvas;
 import java.awt.Frame;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 
 public class JavaDia implements Runnable {
     static Thread displayT = new Thread);
     static boolean bQuit = false;
 
     public static void main {
         displayT.start;
     }
 
     public void run {
         Frame frame = new Frame;
         GLCanvas canvas = new GLCanvas;
         canvas.addGLEventListener);
         frame.add;
         frame.setSize;
         frame.setUndecorated;
         int size = frame.getExtendedState;
         size |= Frame.MAXIMIZED_BOTH;
         frame.setExtendedState;
 
         frame.addWindowListener {
             public void windowClosing {
                 bQuit = true;
             }
         });
         frame.setVisible;
 //      frame.show;
         canvas.requestFocus;
         while {
             canvas.display;
         }
     }
 }


Просмотров: 3770


<<< GLUT
Mesa >>>