基于Java的开源3D游戏引擎jMonkeyEngine
jMonkeyEngine简介
jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就是你可以用它做任何你想做的事情而不必担心版权问题。
这款游戏引擎在商业游戏中使用的不多,但是笔者觉得它的设计思想非常美妙,通过阅读源码能给我们很多启示,下面是一些游戏中的效果图(来自官网)。
jMonkeyEngine使用
SDK下载地址:http://jmonkeyengine.org/downloads/
引擎为我们提供了一款集成开发环境,可以以向导的方式快速创建项目,新建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();}@Overridepublic 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);// skylightdl = 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);}@Overridepublic void simpleUpdate(float tpf){}}
使用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
如果有时间的话笔者可以写一个这方面的专题,请关注我的博客吧。
基于Java的开源3D游戏引擎jMonkeyEngine相关推荐
- 3D游戏 java_基于Java的开源3D游戏引擎jMonkeyEngine
jMonkeyEngine简介 jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就 ...
- [原创]四大开源3d游戏引擎探究(前言上)
[声明] 本人水平有限,只对于长久以来研究的几个经典3d游戏引擎的设计思想.程序架构和应用行深入剖析的结果与游戏开发同行分享,文档有不妥之处请指出,期待我们的共同进步. 引擎名称: 1. ...
- 【转】探索基础元素---基于WebGL的H5 3D游戏引擎BabylonJS
原文地址:https://blog.csdn.net/AceWay/article/details/51472823 介绍 在本教程, 我们将学习如何使用Babylon.js创建基础元素, 比如盒子, ...
- 支持树莓派Raspberry Pi的Delphi开源3D游戏引擎CGE:Castle Game Engine
最近我得到了我的Raspberry Pi 4设备,我对这些可能性感到兴奋(具有全功能Linux的小型便宜设备).我很高兴看到Castle Game Engine在它上面完美运行?以下是在Raspber ...
- 程序员大佬Java开发大型3D游戏,英雄联盟、王者荣耀算什么!
落樱(LuoYing)是一个用于简化3D角色扮演游戏开发的游戏框架,该项目基于Java及JME3(JMonkeyEngine)进行开发,兼容JME,创建的游戏可以跨多个平台发布(Window\Linu ...
- html5 3d游戏引擎演示,HTML5、JavaScript 3D游戏引擎和框架
由于很多人都在用JavaScript.HTML5和WebGL技术创建基于浏览器的3D游戏,所有JavaScript 3D游戏引擎是一个人们主题.基于浏览器的游戏最棒的地方是平台独立,它们能在iOS.A ...
- html5 3d游戏引擎演示,Top 10:HTML5、JavaScript 3D游戏引擎和框架
由于很多人都在用JavaScript.HTML5和WebGL技术创建基于浏览器的3D游戏,所有JavaScript 3D游戏引擎是一个人们主题.基于浏览器的游戏最棒的地方是平台独立,它们能在iOS.A ...
- html5 游戏引擎 2017,Top 10:HTML5、JavaScript 3D游戏引擎和框架
由于很多人都在用JavaScript.HTML5和WebGL技术创建基于浏览器的3D游戏,所有JavaScript 3D游戏引擎是一个人们主题.基于浏览器的游戏最棒的地方是平台独立,它们能在iOS.A ...
- 基于Volcano 3D游戏引擎开发一个类似魔兽世界的场景
VOLCANO MMORPG 3D游戏引擎简介 1.基本介绍:http://volcano2014.cn/ VOLCANO是一款MMORPG(大型多人在线角色扮演)3D网络游戏的开发引擎,用作支持用户 ...
最新文章
- Chrome 被曝 0day 漏洞,可让黑客获取用户数据
- 基于tcpdump的Android智能移动终端数据包捕获完整解决方案
- 记住密码后input黄色背景处理
- nginx 支持h265 的 rtmp和hls,http-flv
- CoreOS安装到硬盘
- 花痴流口水颜文字_流口水可执行模型
- python中错误和异常处理
- MBA已经全面***“中国式教育”!
- 银行卡Bin查询接口
- 一文十大排序算法(动画图解)
- 版本控制选择SVN还是Git?
- [状压dp][BZOJ3717][PA2014]Pakowanie
- linux操作系统拼音,linux怎么读 解读linux的拼音笔顺笔画顺序怎么写!
- 【面试题】将ip地址转换成整数
- kubernetespod控制器详解上
- 越多的人入局棋牌游戏开发行业,游戏产品突出竞技元素
- MSB30M-ASEMI贴片整流桥MSB30M
- 多人聊天功能代码php,PHP+swoole实现简单多人在线聊天群发效果
- 移动硬盘-移动硬盘提示格式化的解决办法
- DFT(离散傅里叶变换)
热门文章
- 如何解决Package ‘zipp’ requires a different Python: 3.5.2 not in '=3.6
- hcfax2e伺服驱动器说明书_松下伺服驱动器说明书.pdf
- 反编译DLL并修改DLL中的内容
- 图解SQL面试题:多表如何查询?
- mstsc.js远程桌面NODE_RDP_PROTOCOL_X224_NEG_FAILURE错误
- 详解FFplay音视频同步
- centeros 7 安装kafka
- android日历获取周,从android中的周数和年份获取周开始和结束日期
- 2022年Shell获取当前周数和java获取当前周数不一致问题
- 跨境智星自养号系统功能介绍与操作说明