micro3dcanvas.java
来自「3D手机游戏开发实例源代码 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 + -
显示快捷键?