zoukankan      html  css  js  c++  java
  • 基于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){
        }
    
    }
    • 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

  • 相关阅读:
    zoj 1671 Walking Ant【简单bfs】
    hdoj 2717 Catch That Cow【bfs】
    hdoj 1010 Tempter of the Bone【dfs查找能否在规定步数时从起点到达终点】【奇偶剪枝】
    poj 1321 棋盘问题【dfs】
    [LC] 124. Binary Tree Maximum Path Sum
    [LC] 113. Path Sum II
    [LC] 112. Path Sum
    [LC] 98. Validate Binary Search Tree
    [LC] 39. Combination Sum
    [LC] 159. Longest Substring with At Most Two Distinct Characters
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317677.html
Copyright © 2011-2022 走看看