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

📄 desk.java

📁 如果对java3D感兴趣的朋友
💻 JAVA
字号:
import java.awt.*;

// a static desk model
public class desk implements model{
	private vector centre;
	private vector iDirection, jDirection, kDirection;
	private vector[][] vertix;
	private paste[] pastes;
	private vector[] polygonNormals;
	private paste[] boundary;
	private int NoOfPolygons;
	private vector[][] bound;
	private vector realCentre;

	public desk(vector centre){
		this.centre = centre;
		realCentre = new vector(centre.x, centre.y, centre.z);
		NoOfPolygons = 473;
		iDirection = new vector(1,0,0);
		jDirection = new vector(0,1,0);
		kDirection = new vector(0,0,1);
		vertix = new vector[NoOfPolygons][];
		pastes = new paste[25];
		bound = new vector[6][4];
		boundary  = new paste[6];
		polygonNormals = new vector[NoOfPolygons];
		createVertix();
		makePaste();
		createBoundary();
	}

	public void update(vector change, double xzRotate, double yzRotate){
		// update the vertix accroding to the camera position and direction
		vector[][] tempVertix = new vector[NoOfPolygons][];
		for(int i = 0; i < tempVertix.length; i++){
			tempVertix[i] = new vector[vertix[i].length];
			for(int j = 0; j < tempVertix[i].length; j++){
				tempVertix[i][j] = vertix[i][j].add(change).rotate_XZ(xzRotate).rotate_YZ(yzRotate);
			}
		}

		pastes[0].update(tempVertix[0]);
		if(pastes[0].visible){
			for(int i = 0; i < 448; i++)
				pastes[0].innerPaste[i].update(tempVertix[i+1]);
		}
		for(int i = 1; i < 25; i++)
			pastes[i].update(tempVertix[i+448]);

		//update boundary
		vector[][] tempBound = new vector[6][4];
		for(int i = 0; i < 6; i++){
			for(int j = 0; j < 4; j++){
				tempBound[i][j] = bound[i][j].add(change).rotate_XZ(xzRotate).rotate_YZ(yzRotate);
			}
		}
		for(int i = 0; i < 6; i ++)
			boundary[i].update(tempBound[i]);

		//update realcentre;
		realCentre = put(14,8,8).add(change).rotate_XZ(xzRotate).rotate_YZ(yzRotate);
	}


	private void createVertix(){
		// must add vertix in a clockwise manner

		int polygonIndex = 0;

		// create desk up surface(detailed light effect)
		vertix[polygonIndex] = new vector[]{put(0,16,16),put(28,16,16),put(28,16,0), put(0,16,0)};
		polygonIndex++;

		for(int i = 0; i < 16; i++){
			for(int j = 0; j < 28; j++){
				vertix[polygonIndex] = new vector[]{put(j, 16, 16 - i),
													put(j+1, 16, 16 - i),
													put(j+1, 16, 15 - i),
													put(j, 16, 15 - i)};
				polygonIndex++;
			}
		}


		// create desk up surface
		vertix[polygonIndex] = new vector[]{put(0,16,0), put(28,16,0), put(28,15,0), put(0,15,0)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(28,16,0), put(28,16,16), put(28,15,16), put(28,15,0)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(28,16,16), put(0,16,16), put(0,15,16), put(28,15,16)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(0,16,16), put(0,16,0), put(0,15,0), put(0,15,16)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(0,15,0), put(28,15,0), put(28,15,16), put(0,15,16)};
		polygonIndex++;

		//create desk legs(left)
		vertix[polygonIndex] = new vector[]{put(1,15,0), put(1,0,0), put(1,0,16), put(1,15,16)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(2,15,16), put(2,0,16), put(2,0,0), put(2,15,0)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(1,15,0), put(2,15,0), put(2,0,0), put(1,0,0)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(1,0,16), put(2,0,16), put(2,15,16), put(1,15,16)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(1,0,0), put(2,0,0), put(2,0,16), put(1,0,16)};
		polygonIndex++;

		//create desk legs(right)
		vertix[polygonIndex] = new vector[]{put(26,15,0), put(26,0,0), put(26,0,16), put(26,15,16)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(27,15,16), put(27,0,16), put(27,0,0), put(27,15,0)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(26,15,0), put(27,15,0), put(27,0,0), put(26,0,0)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(26,0,16), put(27,0,16), put(27,15,16), put(26,15,16)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(26,0,0), put(27,0,0), put(27,0,16), put(26,0,16)};
		polygonIndex++;

		//create desk legs(middle)
		vertix[polygonIndex] = new vector[]{put(19,15,0), put(19,0,0), put(19,0,16), put(19,15,16)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(20,15,16), put(20,0,16), put(20,0,0), put(20,15,0)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(19,15,0), put(20,15,0), put(20,0,0), put(19,0,0)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(19,0,16), put(20,0,16), put(20,15,16), put(19,15,16)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(19,0,0), put(20,0,0), put(20,0,16), put(19,0,16)};
		polygonIndex++;

		// create lower surface
		vertix[polygonIndex] = new vector[]{put(20,4,0), put(26,4,0), put(26,3,0), put(20,3,0)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(20,3,16), put(26,3,16), put(26,4,16), put(20,4,16)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(20,4,0), put(20,4,16), put(26,4,16), put(26,4,0)};
		polygonIndex++;
		vertix[polygonIndex] = new vector[]{put(26,3,0), put(26,3,16), put(20,3,16), put(20,3,0)};
		polygonIndex++;
	}

	private vector put(double x, double y, double z){
		return centre.add(iDirection.scale(x)).add(jDirection.scale(y)).add(kDirection.scale(z));
	}

	private void makePaste(){
		pastes[0] = new paste(vertix[0], new Color(255, 207, 136), 0);
		pastes[0].innerPaste = new paste[448];

		for(int i = 0; i < 448; i++){
			pastes[0].innerPaste[i] = new paste(vertix[i+1], new Color(255, 207, 136),1);
		}

		for(int i = 449; i < 453; i++){
			pastes[i - 448] = new paste(vertix[i], new Color(50, 50, 50), 1);
		}

		//452~453
		pastes[5] = new paste(vertix[453], new Color(255, 207, 136), 1);

		//453~458
		pastes[6] = new paste(vertix[454], new Color(255, 207, 136), 0);
		pastes[7] = new paste(vertix[455], new Color(255, 207, 136), 0);
		pastes[8] = new paste(vertix[456], new Color(75, 75, 75), 1);
		pastes[9] = new paste(vertix[457], new Color(75, 75, 75), 1);
		pastes[10] = new paste(vertix[458], new Color(75, 75, 75), 1);

		//458~463
		pastes[11] = new paste(vertix[459], new Color(255, 207, 136), 0);
		pastes[12] = new paste(vertix[460], new Color(255, 207, 136), 0);
		pastes[13] = new paste(vertix[461], new Color(75, 75, 75), 1);
		pastes[14] = new paste(vertix[462], new Color(75, 75, 75), 1);
		pastes[15] = new paste(vertix[463], new Color(75, 75, 75), 1);
		//463~468
		pastes[16] = new paste(vertix[464], new Color(255, 207, 136), 0);
		pastes[17] = new paste(vertix[465], new Color(255, 207, 136), 0);
		pastes[18] = new paste(vertix[466], new Color(75, 75, 75), 1);
		pastes[19] = new paste(vertix[467], new Color(75, 75, 75), 1);
		pastes[20] = new paste(vertix[468], new Color(75, 75, 75), 1);

		//468~472
		pastes[21] = new paste(vertix[469], new Color(75, 75, 75), 1);
		pastes[22] = new paste(vertix[470], new Color(75, 75, 75), 1);
		pastes[23] = new paste(vertix[471], new Color(255, 207, 136), 1);
		pastes[24] = new paste(vertix[472], new Color(255, 207, 136), 1);
	}

	public void createBoundary(){
		bound[0] = new vector[]{put(0,0,0), put(0,0,16), put(0,16,16), put(0,16,0)};
		boundary[0] = new paste(bound[0], Color.green, 1);
		bound[1] = new vector[]{put(0,16,16), put(28,16,16), put(28,16,0), put(0,16,0)};
		boundary[1] = new paste(bound[1], Color.gray, 1);
		bound[2] = new vector[]{put(0,0,0), put(0,16,0), put(28,16,0), put(28,0,0)};
		boundary[2] = new paste(bound[2], Color.green, 1);
		bound[3] = new vector[]{put(28,16,16), put(0,16,16), put(0,0,16), put(28,0,16)};
		boundary[3] = new paste(bound[3], Color.green, 1);
		bound[4] = new vector[]{put(0,0,0), put(28,0,0), put(28,0,16), put(0,0,16)};
		boundary[4] = new paste(bound[4], Color.green, 1);
		bound[5] = new vector[]{put(28,16,16), put(28,0,16), put(28,0,0), put(28,16,0)};
		boundary[5] = new paste(bound[5], Color.green, 1);
	}

	public paste[] getPolygon(){
		return pastes;
	}

	public paste[] getBoundary(){
		return  boundary;
	}

	public vector getCentre(){
		return realCentre;
	}

}

⌨️ 快捷键说明

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