micro3dcanvas.java

来自「3D手机游戏开发实例源代码」· Java 代码 · 共 126 行

JAVA
126
字号

import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.io.*;
import java.lang.*;

import com.mascotcapsule.micro3d.v3.*;

// SampleCanvas class
public class Micro3DCanvas extends GameCanvas implements Runnable {

 //private static final int COMMAND = Graphics3D.PRIMITVE_TRIANGLES | Graphics3D.PDATA_NORMAL_PER_VERTEX |
     //  Graphics3D.PDATA_TEXURE_COORD | Graphics3D.PDATA_COLOR_NONE | Graphics3D.ENV_ATTR_LIGHTING | Graphics3D.PATTR_BLEND_HALF;
private static final int COMMAND = Graphics3D.PRIMITVE_TRIANGLES |
                               Graphics3D.PDATA_TEXURE_COORD |
                               Graphics3D.PDATA_COLOR_NONE |
                               Graphics3D.PATTR_BLEND_HALF;


	private static Texture texture;
   private Vector3D rotVect = new Vector3D(-2000, -2000, -2000);
   private int rotAngle = 0;

    private  Graphics3D g3d = new Graphics3D();
    private int[] POINTS =  { 
      10, 10, 10,   -10, 10, 10,    10,-10, 10,   -10, 10, 10,    10,-10, 10,   -10,-10, 10,   // front
      -10, 10,-10,    10, 10,-10,   -10,-10,-10,    10, 10,-10,   -10,-10,-10,    10,-10,-10,   // back
      -10, 10, 10,   -10, 10,-10,   -10,-10, 10,  -10, 10,-10,    -10,-10, 10,   -10,-10,-10,   // left
      10, 10,-10,    10, 10, 10,    10,-10,-10,    10, 10, 10,    10,-10,-10,    10,-10, 10,   // right
      10, 10,-10,   -10, 10,-10,    10, 10, 10,   -10, 10,-10,    10, 10, 10,   -10, 10, 10,   // top
      10,-10, 10,   -10,-10, 10,    10,-10,-10,   -10,-10, 10,    10,-10,-10,   -10,-10,-10 }; // bottom


    private int[] NORMALS = {  
        127, 127, 127,      -127, 127, 127,     127, -127, 127,     -127, 127, 127,     127, -127, 127,    -127, -127, 127,
        -127, 127, -127,    127, 127,-127,      -127, -127,-127,    127, 127,-127,      -127, -127,-127,    127, -127, -127,
        -127, 127, 127,     -127, 127, -127,    -127, -127,  127,   -127, 127, -127,    -127, -127,  127,   -127, -127,  -127,
        127, 127, -127,     127, 127, 127,      127, -127, -127,    127, 127, 127,      127, -127, -127,    127, -127,  127,
        127, 127, -127,     -127, 127, -127,    127, 127, 127,      -127, 127, -127,    127, 127, 127,      -127, 127, 127,
        127, -127, 127,     -127, -127, 127,    127, -127, -127,    -127, -127, 127,    127, -127, -127,    -127, -127, -127};



   private int[] TEXTURES = {  
      96, 32,      64, 32,      96, 64,       64, 32,      96, 64,       64, 64,    // cyan
      64, 32,      32, 32,      64, 64,       32, 32,      64, 64,       32, 64,    // blue
      64, 0,       32, 0,       64, 32,       32, 0,       64, 32,       32, 32,    // yellow
      32, 0,        0, 0,       32, 32,        0, 0,       32, 32,        0, 32,    // red
      32, 32,       0, 32,      32, 64,        0, 32,      32, 64,        0, 64,    // magenta
      96, 0,       64, 0,       96, 32,       64, 0,       96, 32,       64, 32 }; // green

//         private int [] COLORS = {  0xFF00FF };  // Placeholder, because we're using textures to color the cube
 private int []COLORS = {0xFFFF00, 0xFF0000, 0x00FFFF, 0x00FF00, 0x0000FF, 0xFF00FF};
// Lights settings. Mascot v3 only has two lights: one directional and one ambient
// Directional light, vector and intesity
	private Vector3D lightDirVec = new Vector3D(-146,293,439);
	//private int lightDir = 3730;
	//private int lightAmbi = 1626;
	//private Light d1_light = new Light(lightDirVec,lightDir,lightAmbi);


	
    private FigureLayout layout;
    private Effect3D effect;
    private AffineTrans trans;

	public Micro3DCanvas() {
        super(false);
      try{
         texture = new Texture("/cubeface.bmp",true);


      } catch (Exception e) {e.printStackTrace();System.out.println("errordsdsdfs");}
				


	   effect = new Effect3D();
     effect.setShadingType(Effect3D.NORMAL_SHADING);
  //effect.setLight(d1_light);
		layout = new FigureLayout();
		layout.setPerspective(10,4096,512);
		layout.setCenter(getWidth()/2, getHeight()/2);
		trans = new AffineTrans();
		trans.setIdentity();
    trans.lookAt( new Vector3D(0, 0, 64), new Vector3D(0, 0, -4096), new Vector3D(0, 4096, 0) );
	  layout.setAffineTrans(trans);
     	Thread t = new Thread(this);
      t.start();
   } 

	
    public void run(){
        Graphics g = getGraphics();
        
        while(true){
            trans.setRotation(rotVect, rotAngle);
	            rotAngle +=10;
            g.setColor(0x000000);
            g.fillRect(0, 0, getWidth(), getHeight());
            draw3D(g);
            flushGraphics();




     

            try{
                Thread.sleep(10);
            }catch(Exception e){

            }
        }        
    }
	public void draw3D( Graphics g ) {
        
      try{
         g3d.bind(g);
         g3d.renderPrimitives(texture, 0, 0, layout, effect, COMMAND, 12, POINTS, NORMALS, TEXTURES,COLORS);
         g3d.flush();
			g3d.release( g );			
		} catch (Throwable h){
			h.printStackTrace();
		} 
	} 
} 

⌨️ 快捷键说明

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