|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
诸如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性能上肯定会站上风的。 |
|