JAVA的OPENGL,JOGL入门实例----不断变色的点阵 (源代码)
来源:互联网 发布:豆果美食软件 编辑:程序博客网 时间:2024/05/28 18:45
原文:http://blog.csdn.net/sidihuo/article/details/44035015
第一个类(代码解读)
- 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);
- // 初始化GLCapabilities
- final GLCapabilities glcaps = new GLCapabilities();
- canvas = new GLCanvas(glcaps); // 初试化GLcanvas,用法参照第一章
- canvas.addGLEventListener(new SecondGLEventListener()); // GLcanvas添加GLEventListener
- getContentPane().add(canvas, BorderLayout.CENTER); // 给窗体panel添加GLcanvas
- animator = 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 stub
- final SecondJoglApp app = new SecondJoglApp();
- // 显示窗体
- SwingUtilities.invokeLater(
- new Runnable() {
- @Override
- public void run() {
- app.setVisible(true);
- }
- }
- );
- SwingUtilities.invokeLater(
- new Runnable() {
- @Override
- public 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
- }
- @Override
- public void display(final 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); // 随机蓝
- final 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
- public void displayChanged(final GLAutoDrawable arg0, final boolean arg1, final boolean arg2) {
- // TODO Auto-generated method stub
- }
- @Override
- public void init(final GLAutoDrawable gld) { // 初始函数
- // TODO Auto-generated method stub
- final 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里
- }
- @Override
- public void reshape(final GLAutoDrawable arg0, final int arg1, final int arg2, final int arg3,
- final int arg4) {
- // TODO Auto-generated method stub
- }
- }
阅读全文
0 0
- JAVA的OPENGL,JOGL入门实例----不断变色的点阵 (源代码)
- JAVA的OPENGL,JOGL入门实例----不断变色的点阵 (源代码)
- JAVA的OPENGL,JOGL入门例子(二)-----不断变色的点阵(2D)
- JAVA的OPENGL,JOGL入门例子----不断变色的点阵(2D)
- JAVA的OPENGL,JOGL入门实例----碰撞移动的正方体 (配置+源代码)
- JAVA的OPENGL,JOGL入门例子----碰撞移动的正方体
- JAVA的OPENGL,JOGL入门例子----碰撞移动的正方体
- 你好,JOGL-Java与OpenGl的绑定
- JOGL - Java与OpenGl的绑定
- “你好,JOGL - Java与OpenGl的绑定”的升级
- JOGL——java eclipse中opengl的配置
- jogl(三)OpenGL中gl,glu,glut的区别
- jogl入门之简单的贪吃蛇
- jogl:在SWT中使用OpenGL的模板(SWT_AWT桥接)
- Java 的JCuda 以及JOGL安装 配置
- Java 的JCuda 以及JOGL安装 配置
- jogl入门
- jogl入门
- Kotlin学习笔记(二)循环,跳转
- CString与char *互转总结
- 有哪些低成本的网站推广方法实用?
- CI对数据库的常用操作
- 内存四区
- JAVA的OPENGL,JOGL入门实例----不断变色的点阵 (源代码)
- Spring Security(16)——基于表达式的权限控制
- 基于单链表的面试题——进阶篇
- 使用Spring实现读写分离( MySQL实现主从复制)
- js中数组的length属性
- 命令模式
- php获取各种时间戳
- WPF ImageButton
- spring mvc 拦截器 HandlerInterceptor 的使用