⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 my3dcanvas.java

📁 很好的j2me3D初学者例子 希望对大家有用
💻 JAVA
字号:
import java.io.IOException;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.m3g.*;
import javax.microedition.midlet.*;
public class My3DCanvas extends Canvas  implements Runnable {
	
	
	private Camera camera;
	private World world;
	private Mesh mesh;
	private Mesh mesh2;
	private Light light;
	private Command command_exit;
	
	private First3DMIDlet midlet;
	
	private Graphics3D g3d;
	private Background background;
	private Image2D image2d;
	
	private Transform transForm;
	private int angle;
	
	private VertexArray vertArray=null;
	private VertexArray normArray=null;
	private VertexArray texArray=null;
	private VertexBuffer vb= new VertexBuffer();
	private TriangleStripArray tsa=null;
	private Material material=null;
	private Appearance appearnce;
	private float fi=30;
	private Transform transform_camera=new Transform();

		
	
	/**
	 * 
	 */
	public My3DCanvas(First3DMIDlet midlet_3d){
		setCommandListener(new CommandListener(){
				public void commandAction(Command c, Displayable arg1) {
					if(c==command_exit){
						try{
							midlet.destroyApp(false);
							midlet.notifyDestroyed();
						}catch(MIDletStateChangeException me){
							me.printStackTrace();
						}	
					}
							
				}
			});
		init(midlet_3d);
	}
	
	public void init(First3DMIDlet midlet_3d){
		this.midlet=midlet_3d;
		command_exit=new Command("Exit",Command.EXIT,1);
		this.addCommand(command_exit);
		g3d=Graphics3D.getInstance();
		
		transForm=new Transform();
		angle=1;
		
		//设置摄像机
		camera=new Camera();
		camera.setPerspective(fi,
						  (float)getWidth()/(float)getHeight(),
						  1.0f,
						  1000.0f);
		//camera.setTranslation(0,0,0);
		
		//设置光线
		light=new Light();
		light.setColor(0xffffff);
		light.setIntensity(1.25f);
		light.setTranslation(0,30,70);
		
		//装载所用的2d图片
		try{
			image2d=new Image2D(Image2D.RGB,Image.createImage("/img/test.png"));
		}catch(IOException ioe){ioe.printStackTrace();System.out.println("/img/test.png");}
		
		//设置背景
		background=new Background();
		background.setColor(0x000000);
		
		try{
		creatMesh();
		}catch(Exception e){e.printStackTrace();System.out.println("creatMesh");}
		
		//mesh2=new Mesh(vb,tsa,appearnce);
		//mesh2.setAppearance(0,appearnce);
		//mesh2.setTranslation(0,0,-60);
		
		world=new World();
		//world.addChild(camera);
		world.addChild(mesh);
		//world.addChild(mesh2);
		//world.setActiveCamera(camera);
		//world.addChild(light);

		
		transform_camera.postTranslate(0,0,90);

	}

	protected void paint(Graphics g) {
		Transform transform_light=new Transform();
		transform_light.postTranslate(0,30,70);

		//mesh.setTransform(transForm);
		//camera.setTransform(transform_camera);
		//fi=fi+0.1f;
		//camera.setParallel(fi,
		//		  (float)getWidth()/(float)getHeight(),
		//		  1.0f,
		//		  1000.0f);

		g.setClip(0,0,getWidth(),getHeight());
		g.drawString("3D demo",2,100,Graphics.LEFT|Graphics.TOP);
		g3d.bindTarget(g,true,Graphics3D.DITHER|Graphics3D.TRUE_COLOR);
		g3d.setViewport(0,0,getWidth(),getHeight());
		g3d.resetLights();
		g3d.clear(background);
		g3d.addLight(light,transform_light);
		
		
		
		transForm.postRotate(angle,1,1,1);
		//transForm.postTranslate(0,0,0);
		transform_camera.postTranslate(0,0,0.02f);
		g3d.setCamera(camera,transform_camera);
		g3d.render(world,transForm);
		//g3d.render(vb,tsa,appearnce,transForm);
		g3d.releaseTarget();
		
	}
	
	public void run(){
		while(true){
			repaint();
		}
	}
	
	private void creatMesh()throws Exception{
		short x = 20; 

		short y = 20; 

		short z = 20; 

		short fx = (short) -x; 

		short fy = (short) -y; 

		short fz = (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
		
		try{vertArray=new VertexArray(vert.length/3,3,2);
		vertArray.set(0,vert.length/3,vert);
		}catch(Exception e){System.out.println("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}; 
		
		try{normArray=new VertexArray(norm.length/3,3,1);
		normArray.set(0,norm.length/3,norm);
		}catch(Exception e){System.out.println("norm");e.printStackTrace();}

		//给出顶点们对应图片上的点(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 }; 
		
		try{
		texArray=new VertexArray(tex.length/2,2,2);
		texArray.set(0,tex.length/2,tex);
		}catch(Exception e){System.out.println("tex");}

		//建立正方体
		vb=new VertexBuffer();
		vb.setPositions(vertArray,1.0f,null);
		vb.setNormals(normArray);
		vb.setTexCoords(0,texArray,1.0f,null);
		
		//建立实例华的方法
		
		int[] spLength={4,4,4,4,4,4};
		tsa=new TriangleStripArray(0,spLength);
		
		
		
		//设置poly模式设置
		PolygonMode polygonMode=new PolygonMode();
		polygonMode.setShading(PolygonMode.SHADE_SMOOTH);
		polygonMode.setCulling(PolygonMode.CULL_NONE);
		
		//生成外貌
		appearnce=new Appearance();
		appearnce.setPolygonMode(polygonMode);
		
		
		//创建帖图
		Texture2D texture=new Texture2D(image2d);
		texture.setBlendColor(Texture2D.FUNC_DECAL);
		texture.setWrapping(Texture2D.WRAP_REPEAT,Texture2D.WRAP_REPEAT);
		texture.setFiltering(Texture2D.FILTER_NEAREST,Texture2D.FILTER_NEAREST);
		
		material=new Material();
		material.setColor(Material.DIFFUSE, 0xFFFFFFFF);
		material.setColor(Material.SPECULAR, 0xFFFFFFFF);
		material.setShininess(100.0f); 
		
		appearnce.setTexture(0,texture);
		appearnce.setMaterial(material);
		
		mesh=new Mesh(vb,tsa,appearnce);
		mesh.setAppearance(0,appearnce);
		
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -