JAVA的OPENGL,JOGL入门例子----不断变色的点阵(2D)

ECLIPSE环境下 JOGL的配置请参照第一章。

APP

package com.jogl.first;

import java.awt.BorderLayout;

import java.awt.Component;

import java.awt.Dimension;

import java.awt.GraphicsConfiguration;

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;

 publicclassSecondJoglAppextendsJFrame{

publicstaticAnimator animator=null;

publicGLCanvas canvas=null;

public SecondJoglApp()throws HeadlessException {

super("第二个JOGL");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//初始化GLCapabilities

    GLCapabilities glcaps =newGLCapabilities();  

    canvas = newGLCanvas(glcaps);                 //初试化GLcanvas,用法参照第一章

    canvas.addGLEventListener(newSecondGLEventListener()); //GLcanvas添加GLEventListener

    getContentPane().add(canvas, BorderLayout.CENTER);      //给窗体panel添加GLcanvas

    animator=newFPSAnimator(canvas,10,true);       //本章重点,给canvas添加动画线程,每秒10帧   

    setSize(500,300);

    centerWindow(this);

}

publicvoid centerWindow(Component frame) {        //把窗体居中

    Dimension screenSize =

       Toolkit.getDefaultToolkit().getScreenSize();

    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

    );

  }

publicstaticvoid main(String[] args) {

// TODO Auto-generated method stub

finalSecondJoglApp app =newSecondJoglApp();

//显示窗体

    SwingUtilities.invokeLater (

      new Runnable() {

        publicvoid run() {

          app.setVisible(true);

        }

      }

    );   

    SwingUtilities.invokeLater (

           new Runnable() {

             publicvoid run() {

              animator.start( );        //开始动画线程               

             }

           }

         );

}

}

listener

package com.jogl.first;

import javax.media.opengl.GL;

import javax.media.opengl.GLAutoDrawable;

import javax.media.opengl.GLEventListener;

import javax.media.opengl.glu.GLU;

import javax.swing.SwingUtilities;

publicclassSecondGLEventListenerimplements GLEventListener {

public SecondGLEventListener() {

// TODO Auto-generated constructor stub

}

@Override

publicvoid display(GLAutoDrawable arg0) {                  //画图函数

// TODO Auto-generated method stub

float red = (float) ((Math.random())*(1.0f));           //随机红

float green = (float) ((Math.random())*(1.0f));         //随机绿

    float blue = (float) ((Math.random())*(1.0f));          //随机蓝

   

    GL gl = arg0.getGL();                                    //从GLAutoDrawable获取GL

    gl.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();          

    }

}

@Override

publicvoid displayChanged(GLAutoDrawable arg0,boolean arg1, boolean arg2) {

// TODO Auto-generated method stub

}

@Override

publicvoid init(GLAutoDrawable gld) {            //初始函数

// TODO Auto-generated method stub

GL gl = gld.getGL();

    GLU glu =newGLU();

    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里

}

@Override

publicvoid reshape(GLAutoDrawable arg0,int arg1, int arg2, int arg3,

int arg4) {

// TODO Auto-generated method stub

}

}

运行效果: 点阵将不停闪动,各位可以尝试把程序改为多行点阵,或者竖的,多玩玩,找找乐趣,获益会更多,

运行效果

转自:http://blog.csdn.net/wjyjimy2/article/details/5550597

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值