Java3D引擎Jmonkeyengine入门.docx

上传人:b****6 文档编号:7742628 上传时间:2023-01-26 格式:DOCX 页数:16 大小:2.03MB
下载 相关 举报
Java3D引擎Jmonkeyengine入门.docx_第1页
第1页 / 共16页
Java3D引擎Jmonkeyengine入门.docx_第2页
第2页 / 共16页
Java3D引擎Jmonkeyengine入门.docx_第3页
第3页 / 共16页
Java3D引擎Jmonkeyengine入门.docx_第4页
第4页 / 共16页
Java3D引擎Jmonkeyengine入门.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

Java3D引擎Jmonkeyengine入门.docx

《Java3D引擎Jmonkeyengine入门.docx》由会员分享,可在线阅读,更多相关《Java3D引擎Jmonkeyengine入门.docx(16页珍藏版)》请在冰豆网上搜索。

Java3D引擎Jmonkeyengine入门.docx

Java3D引擎Jmonkeyengine入门

 

Java3D引擎Jmonkeyengine入门

V0.1版

一.JME在Eclipse上的下载配置:

2

二.LearningjME9

1.HelloWorldJME9

一.JME在Eclipse上的下载配置:

JME()是一个优秀的开源java3D游戏引擎,以下几幅图是由JME开发的游戏的截图,足以吸引你到其主页上瞧瞧吧?

想上手玩玩?

好,我们一步一步来!

即然是开源的,我们要做的第一步就是下载其源码,源码中包含了jme类库的源码和stepbystep的代码示例。

在ec通过cvs中导入jme源码,看图说话吧:

1.点File下的import:

2.选择通过CVS导入:

3.Next后,选中

,如果你是第一次上的话:

4.设定登陆sunCVS的帐号:

主机当然是,Repository如你不知都有哪些项目,就写/cvs吧,这样进去后就可瞧见sun上所在的Open项目了。

帐号?

如你未在上注册过,就全写guest了(我个主觉得还要是注册下,这是个礼貌问题,毕境是用人家辛苦写出来的代码呢!

5.再Next,嗬,原来sun上有这么多开源项目,等搞完这个再慢慢看!

---列表可能有点慢,要看你的网速了,等全列完了,你就在下面选jme导出就OK!

如果你在列表中未找到jme,也不要急,看到这个么?

选中,在里面输入jme后Next。

6.接下来。

不用贴了吧,导入jme的所有源码,资源文件,例程和其所使用的NativeLib,给个最终结果的全图吧:

Src:

所有的源代码

Lib:

javaLib和NativeLib

 

7.到底有啥效果呢?

忙乎了这半天?

往下看,这老外做事真是实在,一课一课的讲怎么做个游戏,就生怕我们不玩它的做品!

Jmetest包下都是一个个的测试例程,只要有main方法的你就可以运行---眼见为实嘛!

我建议你运行jmetest.flagrushtut.lesson9.Lesson9这个类,是个己经Started的赛车游戏!

首先看到的是一个对话框,设置相关参数的,直接OK吧,它总是有默认的!

黑屏…变亮……看到了吗?

如看到上图,你现在就可以使用w,s,a,d四个键控制这个小车车,用鼠标控制视角!

有点简简陋?

是不到2000行代码写出的东东啊,你写2W行试试?

可能屏幕一闪而过,又恢复了原状,那就只有两个原因,一是你机器太破了,跑不起(好像有这种情况,我猜的,3D游戏嘛);另一个原因是你技术cha啦,下载的jar包和本地类库没配好。

Jar包好导入,NativeLib就要右击src目录,在对话框中如下设置:

二.LearningjME

ThiswillprovideallyouneedtogetstartedwithjME.ItassumesyouhavejMEinstalled.Ifnot,youcanlooktothisinstallationguide.Asasupplementtothisguide,youcanreadthedocumentationatjME'sdocumentationlink,payingspecialattentiontojME’swiki.Finally,neverbeafraidtoaskquestions(nomatterhowsimple)atjME’sforum.AllofthecodeyouseehereisdoneusingjME’slatestCVSversion.Also,allthesourcecodehereisintheCVSunderpackagejmetest.TutorialGuidePleasepostanycorrectionsonthejMEforums,oremailthemtomedirectly.

1.HelloWorldJME

最简单的一个JME游戏---只是一个场景展示:

使用rootNode展示一个3DBox.:

在空间中展示一个3D的长方体,界面如下图:

代码简单了,先看一下我再来分析:

importcom.jme.app.AbstractGame;

importcom.jme.app.SimpleGame;

importcom.jme.math.Vector3f;

importcom.jme.scene.shape.Box;

 

/**

*在空间中显示一个长方体:

*1.一个简单游戏只需要继承com.jme.app.SimpleGame即可;

*2.创建一个Box对象,加入到场景中

*@authorjavaFound

*/

publicclassHelloWorldextendsSimpleGame{

//主方法

publicstaticvoidmain(String[]args){

HelloWorldapp=newHelloWorld();

//显示游戏配置窗口,默认为不显示

app.setDialogBehaviour(AbstractGame.ALWAYS_SHOW_PROPS_DIALOG);

//启动游戏

app.start();

}

protectedvoidsimpleInitGame(){

//创建一个Box对象

//第一个参数是其识别名字

//第二个定义了一个Vector3f对象,表示形状在空间中的中心位置点。

//后三个参数分别定义了形状在x,y,z三轴上的拉伸,即长宽高

Boxb=newBox("Mybox",newVector3f(3,2,0),2,20,2);

//rootNode代表场景中的根形状结点,是从父类继承而来的

//将我们自己新建的形状对像b加入到场景中

rootNode.attachChild(b);

}

}

就这么短短的几行代码,看到了吗?

如果还有点摸不着头脑,别急,我来说明下:

1.继承游戏基类SimpleGame:

publicclassHelloWorldextendsSimpleGame

首先,我们的类是extendscom.jme.app.SimpleGame,这是JME提供一游戏引擎基类,当我们自己的类继承其后,再调用start()方法时,JME类库就自动初始化了3d游戏所需要的基础配置。

在com.jme.app.*下面,其它几个类都可以用来继承生成我们的游戏,可根据我们游戏的复杂度选择。

只是SimpleGame是最简单的而己。

换包话说,真正的“引擎”,就是在com.jme.app.*下面。

2.3D形状的创建:

Boxb=newBox("Mybox",newVector3f(3,2,0),2,20,2);

这行代码构建一个3D的立方体,构建时,通过设置Box类不同的构造参数,可以创建不同位置、大小的立方体。

Box有不同的构造器参数,本例中所使用的构造器,第二个参数是一个com.jme.math.Vector3f对象,一个Vector3f对象通过三个float构造而成,用以代表空间中确定某个点坐标的x,y,z值。

在com.jme.math.*下,提供了较常用的数学计算对象;最后一个参数,分别代表了要创建的立方体的长、宽、高参数。

在com.jme.scene.shape.*下面,提供了非常多的3D形状类,比如Sphere等,你可根据自己的需要使用。

3.关于rootNode对象

Boxb=newBox("Mybox",newVector3f(3,2,0),1,1,1);

rootNode.attachChild(b);

:

rooNode是从父类继承而来的,可以理解为当前场景的根对象,后继所加入的对象,将通过rootNode引入,你可以通过rootNode向场景中加入多个形体。

例如,如下代码效果:

Boxb=newBox("Mybox",newVector3f(3,2,0),1,10,1);

rootNode.attachChild(b);

Sphereb2=newSphere("MySphere",newVector3f(3,2,0),4,5,6);

rootNode.attachChild(b2);

Chllenge1:

请在场景是显示一个哑铃状的物体。

2.HelloNode:

本节示例如何在场景中如何定义Node,BoundingVolumes,Sphere,Colors,TranslationandScaling。

如代码示例:

publicclassHelloNodeextendsSimpleGame{

publicstaticvoidmain(String[]args){

HelloNodeapp=newHelloNode();

app.setDialogBehaviour(AbstractGame.ALWAYS_SHOW_PROPS_DIALOG);

app.start();

}

protectedvoidsimpleInitGame(){

Boxb=newBox("MyBox",newVector3f(0,0,0),newVector3f(1,1,1));

//设定一个球形边界外框

b.setModelBound(newBoundingSphere());

//调用这个方法后,以后在场景中所加入的物体在按下B时,就会显示其边界.

b.updateModelBound();

//设置b在空间中的位置

b.setLocalTranslation(newVector3f(5,2,0));

//默认的颜色

b.setDefaultColor(ColorRGBA.blue);

//创建一个球形

Spheres=newSphere("Mysphere",10,10,1f);

s.setModelBound(newBoundingBox());

s.updateModelBound();

//设为随机颜色

s.setRandomColors();

//构造一个用来挂接上面两个物件的子节点

Noden=newNode("MyNode");

//挂接上前面创建的物件

n.attachChild(b);

n.attachChild(s);

//放大节点为其原始大小的5倍

n.setLocalScale(5);

//移动默认场景颜色,物件将会显示自己的颜色

rootNode.setLightCombineMode(LightState.OFF);

//挂接上子节点

rootNode.attachChild(n);

}

}

1.显示边界:

与上节相比,新增加的第一行代码就是:

//设定一个球形边界外框

b.setModelBound(newBoundingSphere());

Bound对象(suchasBoundingSphereandBoundingBox)是jME中的一个关键对象之一.按下B键时,你的物件会的边界会显示在线条构成的球形中(如果使用BoundingSphere对象),在jME中通过物件的Bound对象,可以很容易的观察可视化的和非可视化的物件.特别是当游戏中加入复杂的物件中,如人物。

2.设定位置:

b.setLocalTranslation(newVector3f(5,2,0));

要将物件放到(移动到)指定位置时,需要提供一个Vector3f对象,Vector3f对象构造时的三个参数分别代表空间中x,y,z值。

3.设定物件的颜色:

//默认的颜色

b.setDefaultColor(ColorRGBA.blue);

...

//设为随机颜色

s.setRandomColors();

简单的颜色设置,可通过ColorRGBA的属值设定,当然,你也可通过newColorRGBA(0,1,0,1)调用构造一个自己的色彩对象来设定到物件。

 

3.贴图:

本节演示如何给物件贴图和打光。

先看效果图:

代码如下:

publicclassHelloStatesextendsSimpleGame{

publicstaticvoidmain(String[]args){

HelloStatesapp=newHelloStates();

app.setDialogBehaviour(AbstractGame.ALWAYS_SHOW_PROPS_DIALOG);

app.start();

}

protectedvoidsimpleInitGame(){

//Createourobjects.Nothingnewhere.

Boxb=newBox("mybox",newVector3f(1,1,1),newVector3f(2,2,2));

b.setModelBound(newBoundingBox());

b.updateModelBound();

Spheres=newSphere("Mysphere",15,15,1);

s.setModelBound(newBoundingSphere());

s.updateModelBound();

Noden=newNode("Myrootnode");

//指定要贴图的图片位置

URLmonkeyLoc;

monkeyLoc=HelloStates.class.getClassLoader().getResource("jmetest/data/images/DSC00660.JPG");

//创建贴图对象

TextureStatets=display.getRenderer().createTextureState();

//设定贴图风格:

在物件的每个面贴一张图

Texturet=TextureManager.loadTexture(monkeyLoc,Texture.MM_LINEAR,Texture.FM_LINEAR);

//合并贴图场景

ts.setTexture(t);

//MaterialState对象,用来给物件上色

MaterialStatems=display.getRenderer().createMaterialState();

//构造ColorRGBA对象,即用来上色的颜色

ms.setEmissive(newColorRGBA(0f,.2f,0f,1));

//创建点光源对象

PointLightl=newPointLight();

//设定光源的位置

l.setLocation(newVector3f(0,10,5));

//设定光源的颜色

l.setDiffuse(ColorRGBA.red.clone());

//Enableit

l.setEnabled(true);

//将光源对象加入到场景中

LightStatels=display.getRenderer().createLightState();

ls.attach(l);

//将贴图对象与物件合并

b.setRenderState(ts);

//将光源与物件合并

n.setRenderState(ms);

//光源只对独立物件起效

lightState.detachAll();

n.setRenderState(ls);

//将物件放入场景

n.attachChild(b);

n.attachChild(s);

rootNode.attachChild(n);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1