3D游戏 java_基于Java的开源3D游戏引擎jMonkeyEngine
jMonkeyEngine简介
jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就是你可以用它做任何你想做的事情而不必担心版权问题。
这款游戏引擎在商业游戏中使用的不多,但是笔者觉得它的设计思想非常美妙,通过阅读源码能给我们很多启示,下面是一些游戏中的效果图(来自官网)。
jMonkeyEngine使用
引擎为我们提供了一款集成开发环境,可以以向导的方式快速创建项目,新建BasicGame项目,向导为我们生成基础代码,并引入相应jar包:
点击运行项目按钮或按下F6键,编译运行程序。
源码方式创建游戏项目
jMonkeyEngine引擎源码托管在GitHub上,项目采用gradle构建,源码地址:
https://github.com/jMonkeyEngine/jmonkeyengine
点击Download Zip按钮下载。
开发环境搭建
1.下载gradle并解压,將bin目录设置为环境变量。打开控制台输入gradle -version,显示如下则表示安装成功。
gradle下载地址:http://gradle.org/downloads
2.安装gadle eclipse插件,笔者使用的eclipse 是Luna版本,点击菜单Help->Install New Software,输入地址:http://dist.springsource.com/release/TOOLS/gradle
全选显示的安装项目,一直下一步,安装完成后重启eclipse。
3.將下载的源码解压,新建工作空间,执行File->Import选择Gradle Project。
点击Browse找到项目源码目录,点击Build Model,选择要导入的项目,点击Next按钮,导入后將工程编码设置为UTF-8,不然会报错。
成功导入项目如下图所示:
使用引擎创建应用
接下来我们以jme3-examples工程下的一个案例说明如何使用jMonkeyEngine来渲染3D模型。
程序代码:
package jme3test.blender;
import com.jme3.app.SimpleApplication;
import com.jme3.light.DirectionalLight;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Spatial;
public class TestBlenderLoader extends SimpleApplication {
public static void main(String[] args){
TestBlenderLoader app = new TestBlenderLoader();
app.start();
}
@Override
public void simpleInitApp() {
viewPort.setBackgroundColor(ColorRGBA.DarkGray);
//加载三维模型
Spatial ogre = assetManager.loadModel("Blender/2.4x/Sinbad.blend");
rootNode.attachChild(ogre);
//加载三维模型贴图资源
Spatial track = assetManager.loadModel("Blender/2.4x/MountainValley_Track.blend");
rootNode.attachChild(track);
// 设置太阳光
DirectionalLight dl = new DirectionalLight();
dl.setDirection(new Vector3f(-0.1f,-0.7f,1).normalizeLocal());
dl.setColor(new ColorRGBA(0.44f, 0.30f, 0.20f, 1.0f));
rootNode.addLight(dl);
// skylight
dl = new DirectionalLight();
dl.setDirection(new Vector3f(-0.6f,-1,-0.6f).normalizeLocal());
dl.setColor(new ColorRGBA(0.10f, 0.22f, 0.44f, 1.0f));
rootNode.addLight(dl);
// 设置环境光为白色
dl = new DirectionalLight();
dl.setDirection(new Vector3f(1, -0.5f,-0.1f).normalizeLocal());
dl.setColor(new ColorRGBA(0.80f, 0.70f, 0.80f, 1.0f));
rootNode.addLight(dl);
}
@Override
public void simpleUpdate(float tpf){
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
使用JMonkeyEngine创建应用,需要继承SimpleApplication类,重写父类的simpleInitApp和simpleUpdate,simpleInitApp在程序执行时只会调用一次,完成初始化工作。simpleUpdate是实时调用的,每一帧都会被执行一次,用于实现游戏中的动画效果。
其中rootNode、viewPort、assetManager都是父类的属性,我们可以通过这些属性来加载3D模型,设置环境光等。
编译运行
点击Run As ->Java Application.
可以看到,一个外部的3D模型被完整的渲染到窗口中,使用起来是不是很方便呢。
这篇文章只是对JMonkeyEngine做了简单的介绍,官网上提供的教学资源比较丰富,请参考:
http://wiki.jmonkeyengine.org/doku.php/jme3#documentation_for_intermediate_users
3D游戏 java_基于Java的开源3D游戏引擎jMonkeyEngine相关推荐
- 基于Java的开源3D游戏引擎jMonkeyEngine
jMonkeyEngine简介 jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就 ...
- 基于Java的飞机大战游戏的设计与实现论文
源码下载 http://www.byamd.xyz/hui-zong-1/ 摘 要 现如今,随着智能手机的兴起与普及,加上4G(the 4th Generation mobile communicat ...
- 基于Java的飞机大战游戏的设计与实现(含源文件)
欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 基于Java的飞机大战游戏的设计与实现 摘 要 现如今,随着智能手机的兴起与普及,加上4G( ...
- [计算机毕设]基于java的打飞机游戏系统设计与实现(项目报告+源代码)
基于java的打飞机游戏系统项目说明报告 1.1 手机软件现状 在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行.但是传统 ...
- 基于Java的飞机大战游戏的设计与实现(论文+源码)
毕业设计(论文)任务书 第1页 毕业设计(论文)题目:基于Java的飞机大战游戏的设计与实现毕业设计(论文)要求及原始数据(资料):1.综述基于Java的飞机大战游戏的现状:2.深入了解Java的设计 ...
- 推荐算法实现java_利用Java写开源库 覆盖70多种推荐算法
在经过一年多的开发工作之后,LibRec3.0版本终于发布了.LibRec是一个基于Java的开源算法工具库,覆盖了70余个各类型推荐算法,可以有效解决评分预测和物品推荐两大关键的推荐问题,目前已经在 ...
- 基于Java的坦克大战游戏的设计与实现(论文+PPT+源码)
幻灯片1 基于Java的坦克大战游戏的设计与实现 幻灯片2 CONTENTS 1 4 设计工具与相关技术 详细设计 2 5 系统分析 结论 3 总体设计 幻灯片3 PPT模板下载:http://www ...
- 【java毕业设计】基于java+GUL的超级玛丽游戏GUL设计与实现(毕业论文+程序源码)——超级玛丽游戏
基于java+GUL的超级玛丽游戏GUL设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+GUL的超级玛丽游戏GUL设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. 文章 ...
- 基于Java的开源 Carrot2 搜索结果聚合聚类引擎 2.0发布了
基于Java的开源 Carrot2 搜索结果聚合聚类引擎 2.0发布了 专注是不断前进的指南针 --- 题记 基于Java的开源 Carrot2 搜索结果聚合聚类引擎 2.0发布了. Carrot ...
最新文章
- hdu 4587 2013南京邀请赛B题/ / 求割点后连通分量数变形。
- linux入门教程(七) linux系统用户以及用户组管理
- Castle.MircoKernel Class Diagram - Part I
- 【opencv】图像细化
- 实例37:python
- 顶会VLDB‘22论文解读:CAE-ENSEMBLE算法
- 【Elasticsearch】分片未分配 (UNASSIGNED) failed to obtain in-memory shard lock
- 【算法】BloomFilter 如何判断一个元素在亿级数据中是否存在?
- db2如何锁定一张表_办公必备的保护工作表技巧,你会了么?
- elasticsearch体验(一.初识elasticsearch)
- 智慧女人——你懂吗?
- 皮尔森相关系数_克莱姆相关系数的计算
- 刘海洋《LaTex入门》学习笔记3
- 大数据技术之Hive 第8章 函数 系统内置函数
- UCF动作识别的数据集及处理(pytorch)
- 广东医科大学计算机网络,广东海洋大学计算机网络历年考题(直接阅读版6套可编辑)课件.doc...
- 英语它在计算机旁边怎么读,计算机的英语怎么读?
- Android LiveData初识
- 使用adb命令操作多台设备
- 判断是否为平衡二叉树(Java)
热门文章
- Adobe XD 好用的插件我推荐这 10 个!
- 末日搜索神器3.0发布
- 若依前后端分离发布富文本框内容 | uni-app微信小程序展示富文本框内容
- yum 安装 Kubernete
- MySQL挑战:建立10万连接
- 虚拟同步机离网模型,30KW PCS储能逆变器 离网 并网功能 前端BUCK-BOOST电路,后端三电平逆变器,下垂控制加虚拟同步机控制
- 从正视图中测量长度和角度
- 计算机跨考学校排名,全国33所计算机名校跨考难度系数排名
- ios上传音频文件到服务器,怎么把第三方音频文件添加到Apple Music
- Python报错:python.h 没有那个文件或目录