JAVA的OPENGL,JOGL入门实例----不断变色的点阵 (源代码)

来源:互联网 发布:豆果美食软件 编辑:程序博客网 时间:2024/05/28 18:45

原文:http://blog.csdn.net/sidihuo/article/details/44035015

第一个类(代码解读)

[java] view plain copy
  1. package test1.opengl;  
  2.   
  3. import java.awt.BorderLayout;  
  4. import java.awt.Component;  
  5. import java.awt.Dimension;  
  6. import java.awt.HeadlessException;  
  7. import java.awt.Toolkit;  
  8.   
  9. import javax.media.opengl.GLCanvas;  
  10. import javax.media.opengl.GLCapabilities;  
  11. import javax.swing.JFrame;  
  12. import javax.swing.SwingUtilities;  
  13.   
  14. import com.sun.opengl.util.Animator;  
  15. import com.sun.opengl.util.FPSAnimator;  
  16.   
  17. public class SecondJoglApp extends JFrame {  
  18.   
  19.     public static Animator animator = null;  
  20.   
  21.     public GLCanvas canvas = null;  
  22.   
  23.     public SecondJoglApp() throws HeadlessException {  
  24.   
  25.         super("第二个JOGL");  
  26.   
  27.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  28.   
  29.         // 初始化GLCapabilities  
  30.   
  31.         final GLCapabilities glcaps = new GLCapabilities();  
  32.   
  33.         canvas = new GLCanvas(glcaps); // 初试化GLcanvas,用法参照第一章  
  34.   
  35.         canvas.addGLEventListener(new SecondGLEventListener()); // GLcanvas添加GLEventListener  
  36.   
  37.         getContentPane().add(canvas, BorderLayout.CENTER); // 给窗体panel添加GLcanvas  
  38.   
  39.         animator = new FPSAnimator(canvas, 10true); // 本章重点,给canvas添加动画线程,每秒10帧  
  40.   
  41.         setSize(500300);  
  42.   
  43.         centerWindow(this);  
  44.   
  45.     }  
  46.   
  47.     public void centerWindow(final Component frame) { // 把窗体居中  
  48.   
  49.         final Dimension screenSize =  
  50.   
  51.         Toolkit.getDefaultToolkit().getScreenSize();  
  52.   
  53.         final Dimension frameSize = frame.getSize();  
  54.   
  55.         if (frameSize.width > screenSize.width) {  
  56.             frameSize.width = screenSize.width;  
  57.         }  
  58.   
  59.         if (frameSize.height > screenSize.height) {  
  60.             frameSize.height = screenSize.height;  
  61.         }  
  62.   
  63.         frame.setLocation(  
  64.   
  65.         screenSize.width - frameSize.width >> 1,  
  66.   
  67.         screenSize.height - frameSize.height >> 1  
  68.   
  69.         );  
  70.   
  71.     }  
  72.   
  73.     public static void main(final String[] args) {  
  74.   
  75.         // TODO Auto-generated method stub  
  76.   
  77.         final SecondJoglApp app = new SecondJoglApp();  
  78.   
  79.         // 显示窗体  
  80.   
  81.         SwingUtilities.invokeLater(  
  82.   
  83.         new Runnable() {  
  84.   
  85.             @Override  
  86.             public void run() {  
  87.   
  88.                 app.setVisible(true);  
  89.   
  90.             }  
  91.   
  92.         }  
  93.   
  94.         );  
  95.   
  96.         SwingUtilities.invokeLater(  
  97.   
  98.         new Runnable() {  
  99.   
  100.             @Override  
  101.             public void run() {  
  102.   
  103.                 animator.start(); // 开始动画线程  
  104.   
  105.             }  
  106.   
  107.         }  
  108.   
  109.         );  
  110.   
  111.     }  
  112.   
  113. }  

第二个类
[java] view plain copy
  1. package test1.opengl;  
  2.   
  3. import javax.media.opengl.GL;  
  4. import javax.media.opengl.GLAutoDrawable;  
  5. import javax.media.opengl.GLEventListener;  
  6. import javax.media.opengl.glu.GLU;  
  7.   
  8. public class SecondGLEventListener implements GLEventListener {  
  9.   
  10.     public SecondGLEventListener() {  
  11.   
  12.         // TODO Auto-generated constructor stub  
  13.   
  14.     }  
  15.   
  16.     @Override  
  17.     public void display(final GLAutoDrawable arg0) { // 画图函数  
  18.   
  19.         // TODO Auto-generated method stub  
  20.   
  21.         float red = (float) (Math.random() * 1.0f); // 随机红  
  22.   
  23.         float green = (float) (Math.random() * 1.0f); // 随机绿  
  24.   
  25.         float blue = (float) (Math.random() * 1.0f); // 随机蓝  
  26.   
  27.         final GL gl = arg0.getGL(); // 从GLAutoDrawable获取GL  
  28.   
  29.         gl.glClear(GL.GL_COLOR_BUFFER_BIT); // 填充背景颜色  
  30.   
  31.         gl.glPointSize(5.0f); // 设置点的大小  
  32.   
  33.         for (int i = 0; i < 50; i++) { // 画点  
  34.   
  35.             red -= .09f; // 红色值递减  
  36.   
  37.             green -= .12f; // 绿色值递减  
  38.   
  39.             blue -= .15f; // 蓝色值递减  
  40.   
  41.             if (red < 0.15) {  
  42.                 red = 1.0f;  
  43.             }  
  44.   
  45.             if (green < 0.15) {  
  46.                 green = 1.0f;  
  47.             }  
  48.   
  49.             if (blue < 0.15) {  
  50.                 blue = 1.0f;  
  51.             }  
  52.   
  53.             gl.glColor3f(red, green, blue); // 设置GL的画图颜色,也就是画刷的颜色  
  54.   
  55.             gl.glBegin(GL.GL_POINTS);  
  56.   
  57.             gl.glVertex2i(i * 10150); // 画点由glBegin(GL.GL_POINTS)开始,glEnd()结束  
  58.   
  59.             gl.glEnd();  
  60.   
  61.         }  
  62.   
  63.     }  
  64.   
  65.     @Override  
  66.     public void displayChanged(final GLAutoDrawable arg0, final boolean arg1, final boolean arg2) {  
  67.   
  68.         // TODO Auto-generated method stub  
  69.   
  70.     }  
  71.   
  72.     @Override  
  73.     public void init(final GLAutoDrawable gld) { // 初始函数  
  74.   
  75.         // TODO Auto-generated method stub  
  76.   
  77.         final GL gl = gld.getGL();  
  78.   
  79.         final GLU glu = new GLU();  
  80.   
  81.         gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 设置背景颜色  
  82.   
  83.         gl.glViewport(00500300); // 视点大小  
  84.   
  85.         gl.glMatrixMode(GL.GL_PROJECTION);  
  86.   
  87.         gl.glLoadIdentity();  
  88.   
  89.         glu.gluOrtho2D(0.0500.00.0300.0); // 使坐标系统出现在GL里  
  90.   
  91.     }  
  92.   
  93.     @Override  
  94.     public void reshape(final GLAutoDrawable arg0, final int arg1, final int arg2, final int arg3,  
  95.   
  96.     final int arg4) {  
  97.   
  98.         // TODO Auto-generated method stub  
  99.   
  100.     }  
  101.   

原创粉丝点击