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

来源:互联网 发布:网民网络素养教育 编辑:程序博客网 时间:2024/05/28 11:28

不断变色的点阵 (源代码)

第一个类(代码解读)

package test1.opengl;import java.awt.BorderLayout;import java.awt.Component;import java.awt.Dimension;import java.awt.HeadlessException;import java.awt.Toolkit;import javax.media.opengl.GLCanvas;import javax.media.opengl.GLCapabilities;import javax.swing.JFrame;import javax.swing.SwingUtilities;import com.sun.opengl.util.Animator;import com.sun.opengl.util.FPSAnimator;public class SecondJoglApp extends JFrame {public static Animator animator = null;public GLCanvas canvas = null;public SecondJoglApp() throws HeadlessException {super("第二个JOGL");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 初始化GLCapabilitiesfinal GLCapabilities glcaps = new GLCapabilities();canvas = new GLCanvas(glcaps); // 初试化GLcanvas,用法参照第一章canvas.addGLEventListener(new SecondGLEventListener()); // GLcanvas添加GLEventListenergetContentPane().add(canvas, BorderLayout.CENTER); // 给窗体panel添加GLcanvasanimator = new FPSAnimator(canvas, 10, true); // 本章重点,给canvas添加动画线程,每秒10帧setSize(500, 300);centerWindow(this);}public void centerWindow(final Component frame) { // 把窗体居中final Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();final Dimension frameSize = frame.getSize();if (frameSize.width > screenSize.width) {frameSize.width = screenSize.width;}if (frameSize.height > screenSize.height) {frameSize.height = screenSize.height;}frame.setLocation(screenSize.width - frameSize.width >> 1,screenSize.height - frameSize.height >> 1);}public static void main(final String[] args) {// TODO Auto-generated method stubfinal SecondJoglApp app = new SecondJoglApp();// 显示窗体SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {app.setVisible(true);}});SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {animator.start(); // 开始动画线程}});}}

第二个类

package test1.opengl;import javax.media.opengl.GL;import javax.media.opengl.GLAutoDrawable;import javax.media.opengl.GLEventListener;import javax.media.opengl.glu.GLU;public class SecondGLEventListener implements GLEventListener {public SecondGLEventListener() {// TODO Auto-generated constructor stub}@Overridepublic void display(final GLAutoDrawable arg0) { // 画图函数// TODO Auto-generated method stubfloat red = (float) (Math.random() * 1.0f); // 随机红float green = (float) (Math.random() * 1.0f); // 随机绿float blue = (float) (Math.random() * 1.0f); // 随机蓝final GL gl = arg0.getGL(); // 从GLAutoDrawable获取GLgl.glClear(GL.GL_COLOR_BUFFER_BIT); // 填充背景颜色gl.glPointSize(5.0f); // 设置点的大小for (int i = 0; i < 50; i++) { // 画点red -= .09f; // 红色值递减green -= .12f; // 绿色值递减blue -= .15f; // 蓝色值递减if (red < 0.15) {red = 1.0f;}if (green < 0.15) {green = 1.0f;}if (blue < 0.15) {blue = 1.0f;}gl.glColor3f(red, green, blue); // 设置GL的画图颜色,也就是画刷的颜色gl.glBegin(GL.GL_POINTS);gl.glVertex2i(i * 10, 150); // 画点由glBegin(GL.GL_POINTS)开始,glEnd()结束gl.glEnd();}}@Overridepublic void displayChanged(final GLAutoDrawable arg0, final boolean arg1, final boolean arg2) {// TODO Auto-generated method stub}@Overridepublic void init(final GLAutoDrawable gld) { // 初始函数// TODO Auto-generated method stubfinal GL gl = gld.getGL();final GLU glu = new GLU();gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 设置背景颜色gl.glViewport(0, 0, 500, 300); // 视点大小gl.glMatrixMode(GL.GL_PROJECTION);gl.glLoadIdentity();glu.gluOrtho2D(0.0, 500.0, 0.0, 300.0); // 使坐标系统出现在GL里}@Overridepublic void reshape(final GLAutoDrawable arg0, final int arg1, final int arg2, final int arg3,final int arg4) {// TODO Auto-generated method stub}}


0 0
原创粉丝点击