基于Java的开源3D游戏引擎jMonkeyEngine

jMonkeyEngine简介

jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,并且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话归纳就是你能够用它作任何你想作的事情而没必要担忧版权问题。php

这款游戏引擎在商业游戏中使用的很少,可是笔者以为它的设计思想很是美妙,经过阅读源码能给咱们不少启示,下面是一些游戏中的效果图(来自官网)。java

这里写图片描述

jMonkeyEngine使用

SDK下载地址:http://jmonkeyengine.org/downloads/git

引擎为咱们提供了一款集成开发环境,能够以向导的方式快速建立项目,新建BasicGame项目,向导为咱们生成基础代码,并引入相应jar包:github

这里写图片描述

点击运行项目按钮或按下F6键,编译运行程序。spring

这里写图片描述

源码方式建立游戏项目

jMonkeyEngine引擎源码托管在GitHub上,项目采用gradle构建,源码地址:
https://github.com/jMonkeyEngine/jmonkeyengineapp

这里写图片描述

点击Download Zip按钮下载。eclipse

开发环境搭建

1.下载gradle并解压,將bin目录设置为环境变量。打开控制台输入gradle -version,显示以下则表示安装成功。
这里写图片描述
gradle下载地址:http://gradle.org/downloadside

2.安装gadle eclipse插件,笔者使用的eclipse 是Luna版本,点击菜单Help->Install New Software,输入地址:http://dist.springsource.com/release/TOOLS/gradle
全选显示的安装项目,一直下一步,安装完成后重启eclipse。gradle

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