# GameEngine-Java-3D
使用Java实现一个游戏引擎
## 编写一个Vector2f - 2维向量
添加运算 求模 点积 单位化 旋转 向量加减乘除
## 编写一个Vector3f - 3维向量
添加运算 求模 点积 外积(叉积) 单位化 旋转 向量加减乘除
在添加Camera前,要在Vector3f内添加 旋转公式
![cmd-markdown-logo](./pic/10.png)
![cmd-markdown-logo](./pic/11.png)
[三维旋转:欧拉角、四元数、旋转矩阵、轴角之间的转换](https://zhuanlan.zhihu.com/p/45404840)
## 编写一个Quaternion - 四元数 简化旋转计算
添加运算 求模 单位化 四元数乘法
![cmd-markdown-logo](./pic/1.jpg)
## 编写一个Matrix4f - 四维矩阵
添加运算 单位化 四元数乘法
添加Transorm前要添加好矩阵平移与旋转运算的初始化
### 平移
![cmd-markdown-logo](./pic/4.png)
![cmd-markdown-logo](./pic/4_1.png)
### 旋转
![cmd-markdown-logo](./pic/5.png)
### 缩放
![cmd-markdown-logo](./pic/6.png)
### 透视投影
![cmd-markdown-logo](./pic/7.png)
![cmd-markdown-logo](./pic/8.png)
[透视投影公式证明过程](https://www.cnblogs.com/bluebean/p/5276111.html)
### 世界坐标系向摄像机坐标系转化 --->摄像机矩阵
![cmd-markdown-logo](./pic/9.png)
## 编写Vertex 类
3维点结构
## 编写Mesh
### 添加顶点 并 绘制
![cmd-markdown-logo](./pic/2.png)
### 添加mesh face 使用基于面渲染 而不是点渲染 减少冗余数据
![cmd-markdown-logo](./pic/6.gif)
mesh的资源文件有 以vs后缀结尾 与 以 fs结尾 两类
在model的obj文件里记录了 v(顶点) 与 f(点的连接顺序)的信息
下面以box.obj为例:
![cmd-markdown-logo](./pic/17.png)
任意的模型的面都能由 三角形碎片拼接而成(因为三角形不可再分)
![cmd-markdown-logo](./pic/16.png)
## 创建资源文件夹res
> * models
> * shaders --着色器
> * textures
### shaders --着色器
fs后缀名的文件类型,通常是指矢量文件格式
### textures 纹理
为平面加入纹理:
![cmd-markdown-logo](./pic/25.png)
## 创建资源加载器
### 资源文件类型
> * shaders 着色器文件 vs fs GLSL编写文件
> * model 文件 blender 导出的obj文件 加载到mesh中
其中obj文件里记录了两类信息 v-->顶点坐标信息 f-->mesh face的信息
下图为通过 obj加载器 加载blender导出的方块
![cmd-markdown-logo](./pic/7.gif)
根据文件路径加载文件资源
## 编写 shaders 着色器
为资源着色
![cmd-markdown-logo](./pic/3.png)
其中使用了GLSL着色语言写的资源
> GLSL - OpenGL Shading Language 也称作 GLslang,是一个以C语言为基础的高阶着色语言。它是由 OpenGL ARB 所建立,提供开发者对绘图管线更多的直接控制,而无需使用汇编语言或硬件规格语言。
> 已在渲染管线中的顶点(vertex)和片断(fragment)层次中,加入更具弹性的新功能。 达到在这个层次中,使用片断和顶点着色器的可编程性
## 为shaders 添加Uniform方法
动态调整颜色
![cmd-markdown-logo](./pic/3.gif)
## 编写Transorm
> * 平移 Translation
> * 旋转 Rotation
> * 缩放 Scale
> * 透视投影 perspective projection
> * 转化到摄像机坐标系 cameraRotation + cameraTranslation
![cmd-markdown-logo](./pic/5.gif)
### 透视投影
在添加透视投影前,要在矩阵类(Matrix4f)添加投影的计算方法
> 透视投影是为了获得接近真实三维物体的视觉效果而在二维的纸或者画布平面上绘图或者渲染的一种方法,它也称为透视图。透视投影的绘制必须根据已有的几何规则进行。
![cmd-markdown-logo](./pic/8.jpg)
![cmd-markdown-logo](./pic/8.gif)
## 编写Camera
在添加Camera前,要在矩阵类(Matrix4f)添加转化到摄像机坐标系的的计算方法
![cmd-markdown-logo](./pic/9.gif)
## 编写Texture 与 Material
用来给模型上材质
![cmd-markdown-logo](./pic/10.gif)
![cmd-markdown-logo](./pic/11.gif)
## 添加光源
> * 环境光 ambient light
> * 直线光(平行光) Directional Light 会产生漫反射
> * 点光源 point light
> * 聚光灯 spot light
### 环境光 ambient light
下图为将环境光亮值设置为0.1 Vector3f(0.1f,0.1f,0.1f)); 让周围环境变暗
![cmd-markdown-logo](./pic/12.gif)
下图为将环境光亮值设置为10 Vector3f(10f,10f,10f)); 让周围环境变亮
![cmd-markdown-logo](./pic/13.gif)
### 直线光(平行光) Directional Light
颜色 光强 方向
#### 考虑环境漫反射 diffuse Color
> 在OPENGL中顶点-三角形模型对光照的反射取决于顶点法向量的设置,如果法向量计算正确,显示出来的模型表面很光滑,有光泽,否则不是棱角分明就是模糊、看不清
漫反射计算公式:
![cmd-markdown-logo](./pic/12.png)
![cmd-markdown-logo](./pic/13.png)
![cmd-markdown-logo](./pic/14.png)
[漫反射的计算](https://blog.csdn.net/dingd_158/article/details/72912213)
因此在计算之前要考虑计算法线方向
![cmd-markdown-logo](./pic/15.png)
![cmd-markdown-logo](./pic/18.png)
[顶点法向量的计算](https://www.cnblogs.com/bluebean/p/5276111.html)
可以明显发现,加入漫反射后,明显材质变光滑和自然许多
![cmd-markdown-logo](./pic/14.gif)
#### 考虑镜面反射 (specular reflection)
![cmd-markdown-logo](./pic/20.png)
![cmd-markdown-logo](./pic/19.png)
![cmd-markdown-logo](./pic/15.gif)
可以明显发现,加入镜面反射后,明显材质变更加光滑和自然许多 还可以看到反光
### 点光源 point light Attenuation
点光源衰减公式 因此在计算前要设计好 衰减类
![cmd-markdown-logo](./pic/21.png)
点光源在下图中
![cmd-markdown-logo](./pic/16.gif)
### 聚光灯 spot light
![cmd-markdown-logo](./pic/22.png)
![cmd-markdown-logo](./pic/23.png)
#### 聚光公式:
![cmd-markdown-logo](./pic/24.png)
[聚光公式推导说明](http://wiki.jikexueyuan.com/project/modern-opengl-tutorial/tutorial21.html)
cutoff是一个0-1的数
加入聚光灯:
![cmd-markdown-logo](./pic/17.gif)
----
## 关于我
Github:https://github.com/Qinxianshen
CSDN: https://blog.csdn.net/Qin_xian_shen
个人博客: http://saijiadexiaoqin.cn/
Gitchat:https://gitbook.cn/gitchat/author/59ef0b02a276fd1a69094634
哔哩哔哩:https://space.bilibili.com/126021651/#/
微信公众号:松爱家的小秦
更多LIVE:
[如何利用 Selenium 爬取评论数据?](https://gitbook.cn/gitchat/activity/59ef0fbf54011222e227c720)
[Neo4j 图数据库在社交网络等领域的应用](https://gitbook.cn/gitchat/activity/5a310961259a166307ceadb4)
[如何快速编写小程序商城和安卓 APP 商城](https://gitbook.cn/gitchat/activity/5b628776ff984e633d987f7d)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计
资源推荐
资源详情
资源评论
收起资源包目录
使用Java实现一个游戏引擎.zip (97个子文件)
project_code_0719
pic
12.gif 285KB
6.gif 2.61MB
8.gif 1.05MB
19.png 41KB
10.png 48KB
9.png 31KB
14.gif 352KB
3.png 42KB
12.png 9KB
24.png 129KB
4_1.png 16KB
1.jpg 8KB
25.png 591KB
15.png 6KB
7.gif 1.31MB
5.gif 1.03MB
23.png 68KB
11.png 24KB
13.png 6KB
6.png 7KB
9.gif 1.05MB
15.gif 368KB
8.jpg 53KB
5.png 28KB
4.png 6KB
8.png 11KB
21.png 72KB
3.gif 1.72MB
17.png 50KB
11.gif 536KB
16.png 36KB
16.gif 2.13MB
13.gif 214KB
7.png 57KB
20.png 34KB
18.png 76KB
4.gif 1.49MB
10.gif 674KB
2.png 10KB
14.png 12KB
17.gif 961KB
22.png 74KB
LICENSE 11KB
3DGameEngine
.classpath 1KB
.settings
org.eclipse.jdt.core.prefs 587B
src
com
base
engine
Matrix4f.java 4KB
Transform.java 3KB
Camera.java 3KB
Mesh.java 5KB
Material.java 1KB
Vector3f.java 3KB
SpotLight.java 711B
PointLight.java 927B
Vertex.java 899B
BasicShader.java 749B
DirectionalLight.java 504B
BaseLight.java 467B
Window.java 1KB
Input.java 10KB
Texture.java 847B
Shader.java 4KB
PhongShader.java 6KB
MainComponent.java 2KB
Util.java 2KB
Game.java 4KB
Vector2f.java 2KB
Quaternion.java 2KB
Attenuation.java 957B
Time.java 328B
RenderUtil.java 3KB
res
textures
maxresdefault.png 351KB
test.png 5KB
0.jpg 336KB
2.png 1.16MB
shaders
phongVertex3.vs 453B
basicFragment5.fs 310B
phongFragment.fs 409B
basicVertex5.vs 233B
basicFragment.fs 79B
basicVertex4.vs 235B
phongVertex.vs 234B
phongFragment2.fs 2KB
phongFragment3.fs 3KB
phongVertex1.vs 381B
basicVertex120.vs 203B
basicFragment120.fs 77B
basicVertex.vs 225B
phongVertex4.vs 453B
basicFragment4.fs 133B
phongFragment1.fs 1KB
phongFragment4.fs 4KB
basicVertex1.vs 212B
phongVertex2.vs 453B
models
untitled.mtl 228B
.project 371B
.gitignore 278B
README.md 7KB
共 97 条
- 1
资源评论
辣椒种子
- 粉丝: 3411
- 资源: 5725
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 海信智能电视刷机数据 LED32K20JD(1115)BOM5 生产用软件数据 务必确认机编一致 强制刷机 整机USB升级程序
- 520表白html5爱心代码
- TINY Syntax Tree -setup1.0.0
- mmexport1689832776313.jpg
- 月宝の病理の爱(黑).zi
- 海信智能电视刷机数据 LED32EC510N(2000)BOM22 生产用软件数据 务必确认机编一致 强制刷机 整机USB升级
- 电磁场与波,非常基础的知识总结
- android ios java后台通用DES base64加密
- 华为OD刷题C卷练习记录(300道).rar
- 最新《Vue-框架开发》期末考试试题分享给需要的同学
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功