基于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();
}
@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){
}
}
使用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游戏引擎Irrlicht简介
Irrlicht简介 Irrlicht在国内也被叫做"鬼火"引擎,是一款用C++编写的开放源代码的高性能游戏引擎.而且是跨平台的,具有很好的移植性,Irrlicht支持OpenGl ...
- 排名前10的H5、Js 3D游戏引擎和框架
由于很多人都在用JavaScript.HTML5和WebGL技术创建基于浏览器的3D游戏,所有JavaScript 3D游戏引擎是一个人们主题.基于浏览器的游戏最棒的地方是平台独立,它们能在iOS.A ...
- Java 3D游戏引擎——JME(java Monkey Engine)
转自:http://bbs.gameres.com/forum.php?mod=viewthread&tid=180732 JME(java Monkey Engine),一个非常棒的Java ...
- 记录一下八款开源 Android 游戏引擎
记录一下八款开源 Android 游戏引擎 虽然android学了点点,然后现在又没学了(我为啥这么没有恒心呢大哭).以后有时间还是要继续学android的,一定要啊!虽然现在没学android游戏编 ...
- Android 八款开源 Android 游戏引擎
原文地址 本文内容 Angle Rokon LGame AndEngine libgdx jPCT Alien3d Catcake 最近无意间看到一篇关于 Android 搜索引擎的文章,于是搜索了, ...
- 八款开源 Android 游戏引擎[转]
记录一下,以备不时之需~~~~~ 虽然android学了点点,然后现在又没学了(我为啥这么没有恒心呢大哭).以后有时间还是要继续学android的,一定要啊!虽然现在没学android游戏编程,不过还 ...
- [转]八款开源Android游戏引擎
八款开源Android游戏引擎 1.Angle Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL ES技术开发.该引擎全部用Java代码编写,并且可以根 ...
- 转载:[转]如何学好3D游戏引擎编程
[转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...
- 棒!使用.NET Core构建3D游戏引擎
原文地址:https://mellinoe.wordpress.com/2017/01/18/net-core-game-engine/ 作者:ERIC MELLINO 翻译:杨晓东(Savorboa ...
随机推荐
- 安装 glusterfs yum源报错
yum install glusterfs-server yum 一直报错 把/etc/yum.repos.d 备份 删除了所有文件,从测试机192..168.59.128上同步过来 一直报错 已加载 ...
- c的面向对象思想记录
在一家公司做实习生,努力学习,keep moving. //c1.h typedef struct { +]; int (*tr)(); } trans; //c1.c #include<str ...
- 2015 Multi-University Training Contest 4 hdu 5335 Walk Out
Walk Out Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- POJ——T3259 Wormholes
http://poj.org/problem?id=3259 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 50692 ...
- 洛谷 P2818 天使的起誓
P2818 天使的起誓 题目描述 Tenshi非常幸运地被选为掌管智慧之匙的天使.在正式任职之前,她必须和其他新当选的天使一样要宣誓.宣誓仪式是每位天使各自表述自己的使命,他们的发言稿放在n个呈圆形排 ...
- 50个经典Sql语句
50个经典Sql语句 --1.学生表 Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Cours ...
- JAVA输出带BOM的UTF-8编码的文件
当从http 的response输出CSV文件的时候,设置为utf8的时候默认是不带bom的,可是windows的Excel是使用bom来确认utf8编码的,全部须要把bom写到文件的开头. 微软在 ...
- PHP+MySQL登录注册,完整版,详细注释
纯手写打造. 下载地址:http://download.csdn.net/detail/qq_33599520/9779970 项目结构: 下面是代码: <!DOCTYPE html> & ...
- mac terminal终端怎么退出python命令行
>>>使用 quit(), exit(), 或者Command+d,或者Command+z退出命令行.
- mysql主从复制主服务器日志格式的区别
statement(语句级别,从服务器直接把语句拿来执行): 影响一大片(插入很多条或修改很多条),就适合用 statement row(行级别,从服务器直接 ...