剖析J2ME 3D编程的第一个3D程序(1)(2)
J2ME 3D编程的第一个3D程序源代码如下: //First3DMIDlet.java packagefirst3d; importjavax.microedition.midlet.*; importjavax.microedition.lcdui.*; publicclassFirst3DMIDletextendsMIDlet{ pri
J2ME 3D编程的第一个3D程序源代码如下:
- //First3DMIDlet.java
- packagefirst3d;
- importjavax.microedition.midlet.*;
- importjavax.microedition.lcdui.*;
- publicclassFirst3DMIDletextendsMIDlet{
- privateFirst3DCanvasdisplayable=newFirst3DCanvas();
- publicvoidstartApp(){
- Display.getDisplay(this).setCurrent(displayable);
- }
- publicvoidpauseApp(){}
- publicvoiddestroyApp(booleanunconditional){}
- }
- //First3Dcanvas.java
- packagefirst3d;
- importjavax.microedition.lcdui.*;
- importjavax.microedition.m3g.*;
- importjava.util.*;
- /**
- *第一个3D程序
- */
- publicclassFirst3DCanvas
- extendsCanvas
- implementsRunnable{
- /**World对象*/
- privateWorldmyWorld=null;
- /**Graphics3D对象*/
- privateGraphics3Dg3d=Graphics3D.getInstance();
- /**Camera对象*/
- privateCameracam=null;
- privateintviewport_x;
- privateintviewport_y;
- privateintviewport_width;
- privateintviewport_height;
- privatelongworldStartTime=0;
- //重绘时间
- privateintvalidity=0;
- publicFirst3DCanvas(){
- //启动重绘界面的线程
- Threadthread=newThread(this);
- thread.start();
- try{
- //导入3D图片
- myWorld=(World)Loader.load("/swerve.m3g")[0];
- viewport_x=0;
- viewport_y=0;
- viewport_width=getWidth();
- viewport_height=getHeight();
- cam=myWorld.getActiveCamera();
- //设置cam对象
- float[]params=newfloat[4];
- inttype=cam.getProjection(params);
- if(type!=Camera.GENERIC){
- //calculatewindowaspectratio
- floatwaspect=viewport_width/viewport_height;
- if(waspect<params[1]){
- floatheight=viewport_width/params[1];
- viewport_height=(int)height;
- viewport_y=(getHeight()-viewport_height)/2;
- }
- else{
- floatwidth=viewport_height*params[1];
- viewport_width=(int)width;
- viewport_x=(getWidth()-viewport_width)/2;
- }
- }
- worldStartTime=System.currentTimeMillis();
- }
- catch(Exceptione){}
- }
- protectedvoidpaint(Graphicsg){
- //清除背景
- g.setColor(0x00);
- g.fillRect(0,0,getWidth(),getHeight());
- //和3D对象绑定
- g3d.bindTarget(g);
- g3d.setViewport(viewport_x,viewport_y,
- viewport_width,viewport_height);
- longstartTime=System.currentTimeMillis()-worldStartTime;
- validity=myWorld.animate((int)startTime);
- try{
- g3d.render(myWorld);
- }
- finally{
- g3d.releaseTarget();
- }
- }
- publicvoidrun(){
- try{
- while(true){
- //重绘图形
- repaint(viewport_x,viewport_y,
- viewport_width,viewport_height);
- }
- }catch(Exceptione){}
- }
- }
精彩图集
精彩文章