Java3D引擎Jmonkeyengine入门Word文档下载推荐.docx
- 文档编号:20868938
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:16
- 大小:2.03MB
Java3D引擎Jmonkeyengine入门Word文档下载推荐.docx
《Java3D引擎Jmonkeyengine入门Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Java3D引擎Jmonkeyengine入门Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
)
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("
这行代码构建一个3D的立方体,构建时,通过设置Box类不同的构造参数,可以创建不同位置、大小的立方体。
Box有不同的构造器参数,本例中所使用的构造器,第二个参数是一个com.jme.math.Vector3f对象,一个Vector3f对象通过三个float构造而成,用以代表空间中确定某个点坐标的x,y,z值。
在com.jme.math.*下,提供了较常用的数学计算对象;
最后一个参数,分别代表了要创建的立方体的长、宽、高参数。
在com.jme.scene.shape.*下面,提供了非常多的3D形状类,比如Sphere等,你可根据自己的需要使用。
3.关于rootNode对象
newVector3f(3,2,0),1,1,1);
rootNode.attachChild(b);
:
rooNode是从父类继承而来的,可以理解为当前场景的根对象,后继所加入的对象,将通过rootNode引入,你可以通过rootNode向场景中加入多个形体。
例如,如下代码效果:
newVector3f(3,2,0),1,10,1);
Sphereb2=newSphere("
MySphere"
newVector3f(3,2,0),4,5,6);
rootNode.attachChild(b2);
Chllenge1:
请在场景是显示一个哑铃状的物体。
2.HelloNode:
本节示例如何在场景中如何定义Node,BoundingVolumes,Sphere,Colors,TranslationandScaling。
如代码示例:
publicclassHelloNodeextendsSimpleGame{
HelloNodeapp=newHelloNode();
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.显示边界:
与上节相比,新增加的第一行代码就是:
//设定一个球形边界外框
Bound对象(suchasBoundingSphereandBoundingBox)是jME中的一个关键对象之一.按下B键时,你的物件会的边界会显示在线条构成的球形中(如果使用BoundingSphere对象),在jME中通过物件的Bound对象,可以很容易的观察可视化的和非可视化的物件.特别是当游戏中加入复杂的物件中,如人物。
2.设定位置:
要将物件放到(移动到)指定位置时,需要提供一个Vector3f对象,Vector3f对象构造时的三个参数分别代表空间中x,y,z值。
3.设定物件的颜色:
//默认的颜色
b.setDefaultColor(ColorRGBA.blue);
...
//设为随机颜色
s.setRandomColors();
简单的颜色设置,可通过ColorRGBA的属值设定,当然,你也可通过newColorRGBA(0,1,0,1)调用构造一个自己的色彩对象来设定到物件。
3.贴图:
本节演示如何给物件贴图和打光。
先看效果图:
代码如下:
publicclassHelloStatesextendsSimpleGame{
HelloStatesapp=newHelloStates();
//Createourobjects.Nothingnewhere.
mybox"
newVector3f(1,1,1),newVector3f(2,2,2));
b.setModelBound(newBoundingBox());
15,15,1);
s.setModelBound(newBoundingSphere());
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);
//将物件放入场景
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java3D 引擎 Jmonkeyengine 入门