(废弃)JOGL入门 第5课

[size=large][color=red]声明:[/color][/size][color=blue]
本来是想写点东西,记录学习的过程,并希望能帮助同我一样刚刚学习JOGL的朋友们
可是由于没有明确目的,好心做了坏事,在这里先声明,本来是学习基本的JOGL,在
学习过程中却把朋友们带入到了JOGL+GL4java中,基本的没学扎实,这是很错误的.[/color]

本来想直接学习了JOGL,可是到这一节就不知道怎么弄图片了,
哎郁闷了,怎么办呢?又和NeHe见面了
你可以在
http://jerome.jouvie.free.fr/OpenGl/Tutorials/Tutorial5.php
找到我们将要讲的内容同时也是JOGL,GL4java的结合,
那里有很多代码可以下载来,
我推荐大家到那里学习,顺便可以学学英语
很不错的

这里我们现在要引入一个新的包
BaseCode.jar
可以在
http://jerome.jouvie.free.fr/downloads/OpenGl/BaseCode/BaseCode2-2.2.2-jar.rar
下载
解压后会有很多相同的jar包,那要那个呢?
BaseCode2-2.2.2-jar\BaseCode-jar\Opti\JSR-231\BaseCode.jar
大小为:523KB 为什么呢?
如果引用不对,错误就来了
这里,引入之后由于GL4java,纹理可以支持PNG, BMP, JPG 和 GIF

接下来的学习就容易多了
现在只能重写全部代码

import java.awt.Dimension;
import java.awt.event.*;

import javax.swing.JOptionPane;


import org.jouvieje.io.Stream;
import org.jouvieje.picture.*;
import org.jouvieje.renderer.*;
import org.jouvieje.scene.*;
import org.jouvieje.texture.*;
import org.jouvieje.util.launcher.*;
import org.jouvieje.util.launcher.Settings.Renderer;

public class JOGL05 implements IScene, KeyListener, MouseListener, MouseMotionListener
{
public static void main(String[] args)
{
Dimension screen=new Dimension(800,600);//设置窗口的大小
Settings fr=new Settings(Renderer.JSR231);
fr.setSceneDimension(screen);
Launcher.loadScene("JOGL05", JOGL05.class, fr);
}
float zOffset = -6.0f;

float xRot; //旋转用

//用于存储纹理
Texture[] texture = new Texture[3];
int filter;

//重绘函数
public void reshape(IGLRenderer glRenderer, int x, int y, int width, int height)
{
final IGL gl = glRenderer.getGL();
final IGLU glu = glRenderer.getGLU();

if(height <= 0) height = 1;

gl.glViewport(0, 0, width, height);

gl.glMatrixMode(IGL.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(45.0f, width / height, 0.1f, 1000.0f);
gl.glMatrixMode(IGL.GL_MODELVIEW);
gl.glLoadIdentity();
}
//初始函数
public void init(IGLRenderer glRenderer)
{
ISceneTarget canvas = glRenderer.getSceneTarget();


canvas.addKeyListener(this);
canvas.addMouseListener(this);
canvas.addMouseMotionListener(this);

final IGL gl = glRenderer.getGL();

//载入纹理
if(!loadTextures(glRenderer))
{
JOptionPane.showMessageDialog(null, "纹理载入失败");
System.exit(1);
}
//使用2D纹理
gl.glEnable(IGL.GL_TEXTURE_2D);

gl.glShadeModel(IGL.GL_SMOOTH); //平滑处理
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glClearDepth(1.0); //允许清除深度缓存
gl.glDepthFunc(IGL.GL_LEQUAL); //缓存测试类型
gl.glEnable(IGL.GL_DEPTH_TEST); //允许深度测试

gl.glHint(IGL.GL_PERSPECTIVE_CORRECTION_HINT, IGL.GL_NICEST);


//消隐
gl.glCullFace(IGL.GL_BACK);
gl.glEnable(IGL.GL_CULL_FACE);

//循环
canvas.startRenderingLoop();
}
//此函数实现纹理的载入,支持PNG, BMP, JPG 和 GIF
public boolean loadTextures(IGLRenderer glRenderer)
{
texture = new Texture[3];
TextureLoader textureLoader = new TextureLoader(glRenderer);


Picture picture = PictureLoader.read(new Stream("/data/glass.png"));

texture[0] = textureLoader.loadTexture2D(picture, false, IGL.GL_NEAREST, IGL.GL_NEAREST);

texture[1] = textureLoader.loadTexture2D(picture, false, IGL.GL_LINEAR, IGL.GL_LINEAR);

texture[2] = textureLoader.loadTexture2D(picture, true, IGL.GL_LINEAR_MIPMAP_LINEAR, IGL.GL_LINEAR_MIPMAP_LINEAR);

for(int i = 0; i < texture.length; i++)
{
if(!textureLoader.isTexture(texture[i]))
return false;
}
return true;
}


public void render(IGLRenderer glRenderer)
{
final IGL gl = glRenderer.getGL();

gl.glClear(IGL.GL_COLOR_BUFFER_BIT | IGL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslate(0.0f, 0.0f, zOffset); //向屏幕里面移动zOffset个单位
gl.glRotate(xRot, 1.0f, 1.0f, 0.0f); //绕x轴旋转

//选择纹理
gl.glBindTexture(IGL.GL_TEXTURE_2D, texture[filter].id);

//绘制1个矩形
gl.glBegin(IGL.GL_QUADS);
//
gl.glTexCoord(0.0f, 1.0f); gl.glVertex( 1.0f, 1.0f, 1.0f); //V2
gl.glTexCoord(0.0f, 0.0f); gl.glVertex( 1.0f,-1.0f, 1.0f); //V1
gl.glTexCoord(1.0f, 0.0f); gl.glVertex( 1.0f,-1.0f,-1.0f); //V3
gl.glTexCoord(1.0f, 1.0f); gl.glVertex( 1.0f, 1.0f,-1.0f); //V4
//
gl.glTexCoord(0.0f, 1.0f); gl.glVertex( 1.0f, 1.0f,-1.0f); //V4
gl.glTexCoord(0.0f, 0.0f); gl.glVertex( 1.0f,-1.0f,-1.0f); //V3
gl.glTexCoord(1.0f, 0.0f); gl.glVertex(-1.0f,-1.0f,-1.0f); //V5
gl.glTexCoord(1.0f, 1.0f); gl.glVertex(-1.0f, 1.0f,-1.0f); //V6
//
gl.glTexCoord(0.0f, 1.0f); gl.glVertex(-1.0f, 1.0f,-1.0f); //V6
gl.glTexCoord(0.0f, 0.0f); gl.glVertex(-1.0f,-1.0f,-1.0f); //V5
gl.glTexCoord(1.0f, 0.0f); gl.glVertex(-1.0f,-1.0f, 1.0f); //V7
gl.glTexCoord(1.0f, 1.0f); gl.glVertex(-1.0f, 1.0f, 1.0f); //V8
//
gl.glTexCoord(0.0f, 1.0f); gl.glVertex(-1.0f, 1.0f, 1.0f); //V8
gl.glTexCoord(0.0f, 0.0f); gl.glVertex(-1.0f,-1.0f, 1.0f); //V7
gl.glTexCoord(1.0f, 0.0f); gl.glVertex( 1.0f,-1.0f, 1.0f); //V1
gl.glTexCoord(1.0f, 1.0f); gl.glVertex( 1.0f, 1.0f, 1.0f); //V2
//
gl.glTexCoord(0.0f, 1.0f); gl.glVertex(-1.0f, 1.0f,-1.0f); //V6
gl.glTexCoord(0.0f, 0.0f); gl.glVertex(-1.0f, 1.0f, 1.0f); //V8
gl.glTexCoord(1.0f, 0.0f); gl.glVertex( 1.0f, 1.0f, 1.0f); //V2
gl.glTexCoord(1.0f, 1.0f); gl.glVertex( 1.0f, 1.0f,-1.0f); //V4
//
gl.glTexCoord(0.0f, 1.0f); gl.glVertex(-1.0f,-1.0f, 1.0f); //V7
gl.glTexCoord(0.0f, 0.0f); gl.glVertex(-1.0f,-1.0f,-1.0f); //V5
gl.glTexCoord(1.0f, 0.0f); gl.glVertex( 1.0f,-1.0f,-1.0f); //V3
gl.glTexCoord(1.0f, 1.0f); gl.glVertex( 1.0f,-1.0f, 1.0f); //V1
gl.glEnd();

xRot+=0.1f;
if(xRot>360)
{
xRot=0;
}

}



public void keyReleased(KeyEvent ke)
{
switch(ke.getKeyCode())
{
case KeyEvent.VK_ESCAPE:
System.exit(0);
break;
case KeyEvent.VK_K://用于选择各种纹理,看效果有什么差别
if(filter<2)
{
filter++;
}else{
filter=0;
}
break;
default:
break;
}
}
public void keyPressed(KeyEvent ke)
{
}
public void keyTyped(KeyEvent ke)
{
}
public void mouseEntered(MouseEvent me)
{

}
public void mouseClicked(MouseEvent me)
{

}
public void mouseExited(MouseEvent me)
{

}
public void mousePressed(MouseEvent me)
{
}
public void mouseReleased(MouseEvent me)
{
}
public void mouseMoved(MouseEvent me)
{
}
public void mouseDragged(MouseEvent me)
{
}
}
**项目名称:** 基于Vue.js与Spring Cloud架构的博客系统设计与开发——微服务分布式应用实践 **项目概述:** 本项目为计算机科学与技术专业本科毕业设计成果,旨在设计并实现一个采用前后端分离架构的现代化博客平台。系统前端基于Vue.js框架构建,提供响应式用户界面;后端采用Spring Cloud微服务架构,通过服务拆分、注册发现、配置中心及网关路由等技术,构建高可用、易扩展的分布式应用体系。项目重点探讨微服务模式下的系统设计、服务治理、数据一致性及部署运维等关键问题,体现了分布式系统在Web应用中的实践价值。 **技术架构:** 1. **前端技术栈:** Vue.js 2.x、Vue Router、Vuex、Element UI、Axios 2. **后端技术栈:** Spring Boot 2.x、Spring Cloud (Eureka/Nacos、Feign/OpenFeign、Ribbon、Hystrix、Zuul/Gateway、Config) 3. **数据存储:** MySQL 8.0(主数据存储)、Redis(缓存与会话管理) 4. **服务通信:** RESTful API、消息队列(可选RabbitMQ/Kafka) 5. **部署与运维:** Docker容器化、Jenkins持续集成、Nginx负载均衡 **核心功能模块:** - 用户管理:注册登录、权限控制、个人中心 - 文章管理:富文本编辑、分类标签、发布审核、评论互动 - 内容展示:首页推荐、分类检索、全文搜索、热门排行 - 系统管理:后台仪表盘、用户与内容监控、日志审计 - 微服务治理:服务健康检测、动态配置更新、熔断降级策略 **设计特点:** 1. **架构解耦:** 前后端完全分离,通过API网关统一接入,支持独立开发与部署。 2. **服务拆分:** 按业务域划分为用户服务、文章服务、评论服务、文件服务等独立微服务。 3. **高可用设计:** 采用服务注册发现机制,配合负载均衡与熔断器,提升系统容错能力。 4. **可扩展性:** 模块化设计支持横向扩展,配置中心实现运行时动态调整。 **项目成果:** 完成了一个具备完整博客功能、具备微服务典型特征的分布式系统原型,通过容器化部署验证了多服务协同运行的可行性,为云原生应用开发提供了实践参考。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值