- 浏览: 161673 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
沙舟狼客:
为了方便使用可以配置到环境变量里面MINGW_HOME=C:\ ...
windows下用mingw32+sdl进行简单2d游戏开发(c语言) -
沙舟狼客:
如果安装autotools时不用gcccc相当于gcc的链接n ...
windows下用mingw32+sdl进行简单2d游戏开发(c语言) -
lirihong:
java中文乱码完全解决方案 ?? 高度很高,深度、全面度全 ...
java中文乱码完全解决方案 -
沙舟狼客:
非常适合想写windows游戏的菜鸟
windows下用mingw32+sdl进行简单2d游戏开发(c语言) -
xixilive:
噢喔~~语义全无
京东导航的jquery实现
1、代码:
package org.ligson.jogl.test; import java.awt.BorderLayout; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.media.opengl.GL; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCanvas; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLEventListener; import javax.swing.JFrame; import org.ligson.jogl.test.SnakeDemo.Dir; /* * 事物只有一个 */ public class SnakeDemo extends JFrame implements GLEventListener, Runnable, KeyListener { //产生食物随机坐标 Random random = new Random(); //枚举方向 enum Dir { UP(1), DOWN(2), LEFT(3), RIGHT(4); final int d; private Dir(int d) { this.d = d; } public int getDir() { return this.d; } } //速度 float speed = 10.0f; //长度 int len = 5; // gl库的handler,相当于画笔 GL gl; // 画布 GLCanvas canvas; // 指定了一套OpenGL的功能:渲染内容必须支持,如色彩深度,以及立体是否已启用。 GLCapabilities capabilities; Thread thread = new Thread(this); //蛇集合 List<Snake> snakes = new ArrayList<Snake>(); //食物集合 List<Food> foods = new ArrayList<Food>(); public SnakeDemo() { super("Demo4"); this.setSize(500, 500); //屏幕中心 this.setLocationRelativeTo(null); this.setResizable(false); capabilities = new GLCapabilities(); canvas = new GLCanvas(capabilities); canvas.addGLEventListener(this); this.addKeyListener(this); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); this.add(canvas, BorderLayout.CENTER); thread.start(); } @Override public void run() { while (true) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } canvas.display(); //检查撞击 checkHit(); } } @Override public void display(GLAutoDrawable drawable) { gl.glClear(GL.GL_COLOR_BUFFER_BIT); gl.glClear(GL.GL_DEPTH_BUFFER_BIT); gl.glEnable(GL.GL_DEPTH_TEST); gl.glColor3f(1.0f, 0.0f, 0.0f); painSnakes(); painFoods(); gl.glFlush(); } @Override public void displayChanged(GLAutoDrawable drawable, boolean arg1, boolean arg2) { } @Override public void init(GLAutoDrawable drawable) { gl = drawable.getGL(); gl.glClearColor(0.3f, 0.3f, 0.3f, 1.0f); gl.glShadeModel(GL.GL_FLAT); gl.glFrontFace(GL.GL_CW); //初始化蛇 for (int i = 0; i < len; i++) { Snake snake = new Snake(10.0f, 10.0f, 0.0f, i * 10.0f, Dir.UP); snakes.add(snake); } //初始化食物 Food food = new Food(10.0f, 10.0f, random.nextInt(250), random.nextInt(250)); foods.add(food); } @Override public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) { if (h == 0) { h = 1; } int windowWidth; int windowHeight; gl.glViewport(0, 0, w, h); gl.glMatrixMode(GL.GL_PROJECTION); gl.glLoadIdentity(); if (w <= h) { windowWidth = 250; windowHeight = 250 * h / w; } else { windowWidth = 250 * w / h; windowHeight = 250; } //重新定义世界坐标系,以窗口中心为(0,0,0) gl.glOrtho(0 - windowWidth, windowWidth, 0 - windowHeight, windowHeight, 250.0f, -250.0f); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity(); } public static void main(String[] args) { SnakeDemo demo = new SnakeDemo(); demo.setVisible(true); } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch (key) { case KeyEvent.VK_UP: //防止向相反方向走 if (snakes.get(0).getDir() != Dir.DOWN) { snakes.get(0).setDir(Dir.UP); } break; case KeyEvent.VK_DOWN: if (snakes.get(0).getDir() != Dir.UP) { snakes.get(0).setDir(Dir.DOWN); } break; case KeyEvent.VK_LEFT: if (snakes.get(0).getDir() != Dir.RIGHT) { snakes.get(0).setDir(Dir.LEFT); } break; case KeyEvent.VK_RIGHT: if (snakes.get(0).getDir() != Dir.LEFT) { snakes.get(0).setDir(Dir.RIGHT); } break; case KeyEvent.VK_EQUALS: len++; break; case KeyEvent.VK_MINUS: len--; if (len < 1) { len = 1; } break; default: break; } } @Override public void keyReleased(KeyEvent e) { } private void painSnakes() { int abs = len - snakes.size(); if (abs > 0) { for (int i = 0; i < abs; i++) { Snake lastSnake = snakes.get(snakes.size() - 1); Snake newSnake = new Snake(10.0f, 10.0f, lastSnake.getX() + 10, lastSnake.getY() + 10, lastSnake.getDir()); snakes.add(newSnake); } } else if (abs < 0) { for (int i = 0; i < -abs; i++) { snakes.remove(snakes.size() - 1); } } for (int i = snakes.size() - 1; i >= 1; i--) { Snake tmpSnake = snakes.get(i); Snake prevSnake = snakes.get(i - 1); tmpSnake.setX(prevSnake.getX()); tmpSnake.setY(prevSnake.getY()); tmpSnake.setDir(prevSnake.getDir()); } Snake snake = snakes.get(0); int h = getContentPane().getHeight(); int w = getContentPane().getWidth(); switch (snake.getDir().getDir()) { case 1: if ((snake.getY() + speed - 10.0f) > (h / 2.0)) { snake.setY(-250.0f); } else { snake.setY(snake.getY() + speed); } break; case 2: if ((snake.getY() + speed + snake.getHeight()) < -(h / 2.0)) { snake.setY(250.0f); } else { snake.setY(snake.getY() - speed); } break; case 3: if ((snake.getX() + speed + snake.getWidth()) < -(w / 2.0)) { snake.setX(250.0f); } else { snake.setX(snake.getX() - speed); } break; case 4: if ((snake.getX() + speed - 10.0f) > (w / 2.0)) { snake.setX(-250.0f); } else { snake.setX(snake.getX() + speed); } break; } snakes.set(0, snake); for (Snake snake2 : snakes) { snake2.pain(gl); } } private void painFoods() { if (foods.size() == 0) { Food food = new Food(10.0f, 10.0f, random.nextInt(250), random.nextInt(250)); foods.add(food); } for (Food food : foods) { food.pain(gl); } } private void checkHit() { for (Snake snake : snakes) { for (Food food : foods) { if (Math.abs(snake.getX() - food.getX()) < 10.0f && Math.abs(snake.getY() - food.getY()) < 10.0f) { len++; foods.remove(food); break; } } } } } class Food { private float width = 10.0f; private float height = 10.0f; private float x = 0.0f; private float y = 0.0f; public Food(float width, float height, float x, float y) { super(); this.width = width; this.height = height; this.x = x; this.y = y; } public float getWidth() { return width; } public void setWidth(float width) { this.width = width; } public float getHeight() { return height; } public void setHeight(float height) { this.height = height; } public float getX() { return x; } public void setX(float x) { this.x = x; } public float getY() { return y; } public void setY(float y) { this.y = y; } public void pain(GL gl) { gl.glBegin(GL.GL_QUADS); gl.glVertex3f(this.x, this.y, 0.0f); gl.glVertex3f(this.x, this.y + height, 0.0f); gl.glVertex3f(this.x + width, this.y + height, 0.0f); gl.glVertex3f(this.x + width, this.y, 0.0f); gl.glEnd(); } } class Snake { private float width = 10.0f; private float height = 10.0f; private float x = 0.0f; private float y = 0.0f; private Dir dir = Dir.UP; private Random random = new Random(); public Snake(float width, float height, float x, float y, Dir dir) { super(); this.width = width; this.height = height; this.x = x; this.y = y; this.dir = dir; } public float getWidth() { return width; } public void setWidth(float width) { this.width = width; } public float getHeight() { return height; } public void setHeight(float height) { this.height = height; } public float getX() { return x; } public void setX(float x) { this.x = x; } public float getY() { return y; } public void setY(float y) { this.y = y; } public Dir getDir() { return dir; } public void setDir(Dir dir) { this.dir = dir; } public float[] getPoints() { return null; } public void pain(GL gl) { gl.glColor3f(random.nextFloat(), random.nextFloat(), random.nextFloat()); gl.glBegin(GL.GL_QUADS); gl.glVertex3f(this.x, this.y, 0.0f); gl.glVertex3f(this.x, this.y + height, 0.0f); gl.glVertex3f(this.x + width, this.y + height, 0.0f); gl.glVertex3f(this.x + width, this.y, 0.0f); gl.glEnd(); } public String toString() { return "X:" + this.x + ";Y:" + this.y; } }
2、jogl需要的库
http://ligson.iteye.com/blog/1331528
发表评论
-
java中文乱码完全解决方案
2013-11-18 22:05 24301、代码编码全部用UTF8,特别是配置用的属性文件 2、J ... -
Highcharts动态曲线图(使用jna监视cpu使用率)
2012-01-10 22:30 92601、CPU使用率获取,因为我要用JNA调用,所以用c++调用w ... -
grails验证码插件-JCaptcha
2012-01-10 12:56 23731、安装 grails install-plugin jca ... -
jogl入门
2011-12-31 13:19 51301、jogl是什么? jogl是Java OpenGL的 ... -
grails学习之自定义标签
2011-12-30 17:22 57831、在grails项目结构中有一个taglib文件夹(项目名/ ... -
加密机制的发展(JCE/JCA)
2011-12-23 17:56 4835一、对称密钥-------最原始的加密解密 对称 ... -
开发一个JCE的Provider
2011-12-23 13:42 44851、开发环境ubuntu+eclipse+openJDK ... -
enum还有人记得吗?
2011-12-21 15:42 1116enum其实挺好用的,特别是对于一些固定的东西! packa ... -
JNA入门1
2011-12-06 22:15 37111、jna是什么 jna是java native acces ... -
利用BC替换X509证书的公钥
2011-11-23 09:54 2252public static X509Certificate r ... -
利用BC的X509v3CertificateBuilder组装X509证书
2011-11-22 17:38 3894// 设置开始日期和结束日期 long year = 3 ... -
grails框架中webService插件的使用(axis2,cxf)
2011-09-17 22:40 3220一、cxf插件的使用: 1、运行命令: grails in ... -
Java直接发送邮件或写好的eml邮件
2011-08-03 13:50 1534import java.io.File; import ... -
利用bouncycastle组装X509证书
2011-08-02 19:02 9471CreateCert.java package com.se ... -
Java中对称密钥、非对称密钥和数字签名的用法
2011-04-16 12:21 32111、非对称密钥: package com.mysec; ... -
eclipse3.6 太阳神版 中文汉化插件
2011-04-09 20:00 1153经常用eclipse,但用多了英文版,突然间想找个新鲜感,于是 ... -
Java中的按位取反运算符,哪位能详解一下?
2011-03-14 23:29 2240最近面试遇到了这样一道题: System.out.print ... -
Java常见排序算法
2011-02-24 17:53 857package test; import java ... -
常见模式例子
2011-02-24 17:37 1019工厂模式 package login.sj; ... -
关于Java中各种修饰符与访问修饰符的说明
2011-02-24 15:05 1030类: 访问修饰符 修饰符 class 类名称 exte ...
相关推荐
以下是一个简单的Jogl入门例子,展示如何创建一个基本的OpenGL窗口并绘制一个红色的立方体: 1. 首先,导入必要的Jogl库: ```java import com.jogamp.opengl.GL2; import com.jogamp.opengl.GLAutoDrawable; ...
这个是我刚刚学JOGL的时候找到的一份资料,很适合JOGL的初学者,内容是E文的,但都是通俗易懂的,只要一点点英语基础就可以理解,现在JOGL的资料很少,希望对想学而又找不到资料的朋友有点帮助
标题提到的"jogl简单入门例子"是针对初学者的一系列教程或示例代码,帮助快速理解和上手JOGL。这些例子可能涵盖了JOGL的基本概念、对象创建、渲染流程、纹理映射、变换操作、光照处理等方面,通过实践来巩固理论知识...
总之,这个JOGL入门例子展示了如何使用Java和OpenGL结合来创建一个简单的3D机器人模型。通过学习这个例子,你将掌握JOGL的基础知识,包括坐标系统、几何形状的绘制、变换操作以及深度测试,这些都是进行3D图形编程的...
在入门JOGL时,首先需要了解的关键知识点包括: 1. **环境配置**:使用JOGL需要安装特定的JAR包和DLL库。这些库包含了与操作系统交互的本地代码,确保OpenGL调用能正确地被底层图形硬件处理。在描述中提到的博文中...
在本篇博客“JAVA的OPENGL,JOGL入门例子(五)----充满能量的立体三维螺旋体”中,我们将探讨如何使用Java与OpenGL图形库JOGL(Java Bindings for OpenGL)来创建动态的3D图形。OpenGL是一个强大的跨平台图形库,而...
在本篇关于JAVA的OpenGL(JOGL)入门教程的第四部分中,我们将探索如何创建一个具有丰富视觉效果的螺旋体。OpenGL是一个强大的图形库,它允许程序员直接与GPU交互,生成高质量的2D和3D图形。JOGL是Java语言对OpenGL...
【标题】"nehe的jogl与其他jogl教程20121102" 提供了一套关于Java实现OpenGL图形编程的资源,主要聚焦在JOGL(Java Bindings for OpenGL)框架上。JOGL是Java平台上的一个开源库,它允许开发者使用Java语言直接访问...
标题“jogl 2.3.2 linux amd64”涉及的是Java OpenGL(JOGL)的一个特定版本,针对Linux操作系统且适用于AMD64(也称为x86_64)架构。JOGL是一个Java绑定库,它允许Java程序员直接使用OpenGL图形库进行高性能的3D...
《Jogl-2.1开发相关文件详解》 在计算机图形学领域,OpenGL是一个广泛使用的图形库,用于渲染2D和3D图像。...记得根据你的系统配置选择正确的库文件,结合源码和文档,你就能开始你的Jogl图形编程之旅了。
标题 "64位jogl包" 提供的信息表明,这是一个专为64位操作系统设计的Java OpenGL绑定库。JOGL,全称为Java Bindings for OpenGL,是Java平台上的一个开源项目,它允许Java开发者直接使用OpenGL标准来创建高性能的...
这四个PDF文件——jogl2.pdf、jogl3.pdf、jogl1v4.pdf、jogl4.pdf,可能分别对应JOGL的不同版本或不同主题的学习资源,帮助学习者全面了解JOGL的不同方面。 描述中的“英文版的jogl 4合1教程”意味着这些教程是用...
在JOGL入门例子(十四)中,我们可能会学习如何创建、使用和管理显示列表。这通常包括以下步骤: 1. **创建显示列表**:使用`glNewList()`函数指定列表的标识符,并设定开始定义列表的标志。 2. **定义列表**:在这...
### JOGL2:《Touring the World》游戏开发与技术解析 #### 一、概述 在探讨《JOGL学习PDF2》中所提及的“JOGL2:Touring the World”这一主题时,我们深入剖析了Java编程环境下的OpenGL(JOGL)应用,通过构建一...
**Jogl API 深入解析** Jogl (Java OpenGL) 是一个用于Java平台的OpenGL绑定库,它允许Java开发者利用OpenGL的强大功能进行图形处理和3D渲染。OpenGL是一种跨语言、跨平台的编程接口,主要用于渲染2D、3D矢量图形。...
我们将使用 JOGL 创建一个简单的矩形绘制程序。 ```java package fuhao; import javax.swing.JFrame; import com.jogamp.opengl.GL2; import com.jogamp.opengl.GLAutoDrawable; import ...