JAVA网页设计手机上J2ME的3D编程-复杂创立3D立方体...
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net里有这些工具吗?要简单多少?。编程|创立参考文档:JSR-184工具:Eclipse3.0+Eclipseme
API:Mobile3DGraphicsAPI
摹拟器:SonyEricsson
剖析:
在实际生存中,我们所看到的是一个3维体系。透过双眼,能够看到的是一个丰厚多彩的天下。我们所用的拍照机,可以拍出良多大度的图片。拍摄每张图片时,能够依据拍摄间隔的远近能够调剂所拍摄画面上的内容。
在假造的天下里,能够摹拟实在天下。欲将假造天下展现出来,就要使用一个假造的拍照机,将假造的天下拍摄出来。
在JSR-184中,假造的天下是由World类机关的。假造的拍照机是Camera类。经由过程Camera的地位或视角的改面,将假造天下显现得手机屏幕上。Camera默许是朝向Z轴的负偏向。在假造天下中,各个物体都是由Mesh类创立的。分歧的Mesh属性对应分歧的物体。
机关物体时,先要机关物体的骨架(即外形),然后用一种质料蒙到骨架上。物体的外形,是由一组点和每一个点的法向量决意的。质料则是图片。
上面依照与下面相反的按次再一个假造的天下中构建一个立方体。步骤以下:
1机关立方体
机关一个立方体必要给出立方体的各个极点,然后划定各个极点的法向量,最初将图片帖到由极点和各点法向量组成的架子上。
各个极点的给出,是和法向量共同的。因为立方体是由6个矩形构成的,以是就要断定这6个矩形。由于由一个点和一个法向量就可以够断定一个面,那末4个极点和4个法向量就断定了4个面。假如这4个面堆叠,4个极点就组成了一个矩形的地区。用这个办法断定6个矩形,再用这6个举办构成一个立方体。
将图片帖到立方体是,就是将立方体上的极点和图片上的点举行对应。二者能够用分歧的单元。
上面构建一个立方体
给出立方体的极点们:
shortx=20;
shorty=20;
shortz=20;
shortfx=(short)-x;
shortfy=(short)-y;
shortfz=(short)-z;
short[]vert={x,y,z,fx,y,z,x,fy,z,fx,fy,z,//D
fx,y,fz,x,y,fz,fx,fy,fz,x,fy,fz,//C
fx,y,z,fx,y,fz,fx,fy,z,fx,fy,fz,//B
x,y,fz,x,y,z,x,fy,fz,x,fy,z,//F
x,y,fz,fx,y,fz,x,y,z,fx,y,z,//A
x,fy,z,fx,fy,z,x,fy,fz,fx,fy,fz};//E
VertexArrayvertArray=newVertexArray(vert.length/3,3,2);
vertArray.set(0,vert.length/3,vert);
给出立方体极点们的法向量:
byte[]norm={0,0,127,0,0,127,0,0,127,0,0,127,
0,0,-127,0,0,-127,0,0,-127,0,0,-127,
-127,0,0,-127,0,0,-127,0,0,-127,0,0,
127,0,0,127,0,0,127,0,0,127,0,0,
0,127,0,0,127,0,0,127,0,0,127,0,
0,-127,0,0,-127,0,0,-127,0,0,-127,0};
VertexArraynormArray=newVertexArray(norm.length/3,3,1);
normArray.set(0,norm.length/3,norm);
给召盘点们对应图片上的点(vert和tex数组是逐一对应的):
short[]tex={1,0,0,0,1,1,0,1,
1,0,0,0,1,1,0,1,
1,0,0,0,1,1,0,1,
1,0,0,0,1,1,0,1,
1,0,0,0,1,1,0,1,
1,0,0,0,1,1,0,1};
VertexArraytexArray=newVertexArray(tex.length/2,2,2);
texArray.set(0,tex.length/2,tex);
依据下面给出的数组,构成立方体:
//createtheVertexBufferforourobject
VertexBuffervb=boxVB=newVertexBuffer();
vb.setPositions(vertArray,1.0f,null);
vb.setNormals(normArray);
vb.setTexCoords(0,texArray,1.0f,null);
2将立方体实例化
//thelengthofeachtrianglestrip
int[]stripLen={4,4,4,4,4,4};
//createtheindexbufferforourobject(thistellshowto
//createtrianglestripsfromthecontentsofthevertexbuffer).
TriangleStripArraytsa=newTriangleStripArray(0,stripLen);
//创立多边形形式。
PolygonModepm=newPolygonMode();
pm.setShading(PolygonMode.SHADE_SMOOTH);
pm.setCulling(PolygonMode.CULL_NONE);
//天生表面。
Appearanceapp=newAppearance();
app.setPolygonMode(pm);
ImagetexImg=null;
try{
texImg=Image.createImage(this.imageUrl);
}catch(Exceptione){
StringstrErr="LoadImage(path=";
strErr+=this.imageUrl;
strErr+=")Fail!";
System.err.println(strErr);
}
Texture2Dtexture=null;
try{
//createtexturefromloadedimage.
texture=newTexture2D(newImage2D(Image2D.RGB,texImg));
}catch(Exceptione){
e.printStackTrace();
StringstrErr="FailedtocreatetextureUseFormat---Image2D.RGB";
System.out.println(strErr);
}
try{
//repeattextureonsurface
texture.setWrapping(Texture2D.WRAP_REPEAT,Texture2D.WRAP_REPEAT);
}catch(Exceptione){
e.printStackTrace();
System.out.println("Failedtocreatetexture3");
}
try{
//Blendmodetouse.
texture.setBlending(Texture2D.FUNC_DECAL);
}catch(Exceptione){
System.out.println("Failedtocreatetexture4");
}
try{
//Usenearestforperformance,linearforquality
texture.setFiltering(Texture2D.FILTER_NEAREST,Texture2D.FILTER_NEAREST);
}catch(Exceptione){
System.out.println("Failedtocreatetexture5");
}
try{
app.setTexture(0,texture);
}catch(Exceptione){
System.out.println("Failedtocreatetexture6");
}
//创立网格。
mesh=newMesh(vb,tsa,app);
mesh.setAppearance(0,app);
3创立World
//createacamera
camera=newCamera();
camera.setPerspective(60.0f,//fieldofview
(float)getWidth()/(float)getHeight(),//aspectRatio
1.0f,//nearclippingplane
1000.0f);//farclippingplane
camera.setTranslation(0,0,50);
world=newWorld();
world.addChild(camera);
world.addChild(mesh);
world.setActiveCamera(camera);
4绘制World
//privateGraphics3Dg3d=null;
protectedvoidpaint(Graphicsg){
//TODOAuto-generatedmethodstub
Draw(g);
}
privatevoidDraw(Graphicsg){
try{
g3d.bindTarget(g);
g3d.render(world);
}catch(Exceptione){
}finally{
g3d.releaseTarget();
}
}
5扭转立方体
mesh.postRotate(1.0f,1.0f,0f,0f);
认识是以向量为(1,0,0)的偏向(就是x轴)为轴将立方体扭转1度。
至此,就是制作一个假造的天下,并安排一个立方体的步骤。下面的代码是从一个完全的程序中截取的,有的中央大概不便利了解。前面将附上完全的代码。
你说是sun公司对她研究的透还是微软?针对自己工具开发的.net性能上肯定会站上风的。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 是一种使网页(Web Page)产生生动活泼画面的语言 是一种使网页(Web Page)产生生动活泼画面的语言 Java 编程语言的风格十分接近C、C++语言。 是一种为 Internet发展的计算机语言 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 是一种使用者不需花费很多时间学习的语言 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
页:
[1]