📄 cube.java
字号:
public class cube extends solidObject{
public vector start;
public vector iDirection, jDirection, kDirection;
public vector[] specularCentre;
public double theta, angle;
public double height;
public cube(double x, double y, double z){
start = new vector(x,y,z);
iDirection = new vector(0.5,0,0);
jDirection = new vector(0,0.5,0);
kDirection = new vector(0,0,0.5);
this.start = start;
makeBoundary();
super.visible = super.testVisibility();
super.tempCentre = new vector(0,0,0);
super.findCentre();
makePolygons();
sortedPolygons = true;
moveCode = "cube";
theta = Math.PI/45;
}
public void makeBoundary(){
boundary = new polygon3D[6];
vector[] a = new vector[]{put(0, 4, 0), put(4, 4, 0), put(4, 0, 0), put(0,0,0)};
boundary[0] = new polygon3D(a, null, null, null, null);
vector[] b = new vector[]{put(4, 4, 0), put(4, 4, 4), put(4, 0, 4), put(4,0,0)};
boundary[1] = new polygon3D(b, null, null, null, null);
vector[] c = new vector[]{put(4, 4, 4), put(0, 4, 4), put(0, 0, 4), put(4,0,4)};
boundary[2] = new polygon3D(c, null, null, null, null);
vector[] d = new vector[]{put(0, 4, 4), put(0, 4, 0), put(0, 0, 0), put(0,0,4)};
boundary[3] = new polygon3D(d, null, null, null, null);
vector[] e = new vector[]{put(0, 4, 0), put(0, 4, 4), put(4, 4, 4), put(4,4,0)};
boundary[4] = new polygon3D(e, null, null, null, null);
vector[] f = new vector[]{put(0, 0, 0), put(4,0, 0), put(4, 0, 4), put(0,0,4)};
boundary[5] = new polygon3D(f, null, null, null, null);
}
public void makePolygons(){
polygons = new polygon3D[6];
vector[] t;
vector normal;
t = new vector[]{put(0.5, 3.5, 0.5), put(3.5, 3.5, 0.5), put(3.5, 0.5, 0.5), put(0.5,0.5,0.5)};
polygons[0] = new polygon3D(t, t[0], t[1], t[3], gallery.textures[5]);
normal = polygons[0].normal;
polygons[0].vertixNormals = new vector[]{normal.myClone(), normal.myClone(), normal.myClone(), normal.myClone()};
t = new vector[]{put(3.5, 3.5, 0.5), put(3.5, 3.5, 3.5), put(3.5, 0.5, 3.5), put(3.5,0.5,0.5)};
polygons[1] = new polygon3D(t, t[0], t[1], t[3], gallery.textures[6]);
normal = polygons[1].normal;
polygons[1].vertixNormals = new vector[]{normal.myClone(), normal.myClone(), normal.myClone(), normal.myClone()};
t = new vector[]{put(3.5, 3.5, 3.5), put(0.5, 3.5, 3.5), put(0.5, 0.5, 3.5), put(3.5,0.5,3.5)};
polygons[2] = new polygon3D(t, t[0], t[1], t[3], gallery.textures[7]);
normal = polygons[2].normal;
polygons[2].vertixNormals = new vector[]{normal.myClone(), normal.myClone(), normal.myClone(), normal.myClone()};
t = new vector[]{put(0.5, 3.5, 3.5), put(0.5, 3.5, 0.5), put(0.5, 0.5, 0.5), put(0.5,0.5,3.5)};
polygons[3] = new polygon3D(t, t[0], t[1], t[3], gallery.textures[8]);
normal = polygons[3].normal;
polygons[3].vertixNormals = new vector[]{normal.myClone(), normal.myClone(), normal.myClone(), normal.myClone()};
t = new vector[]{put(0.5, 3.5, 0.5), put(0.5, 3.5, 3.5), put(3.5, 3.5, 3.5), put(3.5,3.5,0.5)};
polygons[4] = new polygon3D(t, t[0], t[1], t[3], gallery.textures[9]);
normal = polygons[4].normal;
polygons[4].vertixNormals = new vector[]{normal.myClone(), normal.myClone(), normal.myClone(), normal.myClone()};
t = new vector[]{put(0.5, 0.5, 0.5), put(3.5,0.5, 0.5), put(3.5, 0.5, 3.5), put(0.5,0.5,3.5)};
polygons[5] = new polygon3D(t, t[0], t[1], t[3], gallery.textures[10]);
normal = polygons[5].normal;
polygons[5].vertixNormals = new vector[]{normal.myClone(), normal.myClone(), normal.myClone(), normal.myClone()};
for(int i = 0; i < 6; i ++){
polygons[i].gouraudShading = true;
polygons[i].roughness = 4;
}
}
public void move(){
angle+=(theta*2);
vector.sinXZ = Math.sin(theta);
vector.cosXZ = Math.cos(theta);
height = 0.05* Math.sin(angle);
vector shift = new vector(1,1,1);
for(int i = 0; i < 6; i ++){
polygons[i].realNormal.rotateXZ();
polygons[i].realCentre.subtract(start);
polygons[i].realCentre.subtract(shift);
polygons[i].realCentre.rotateXZ();
polygons[i].realCentre.add(start);
polygons[i].realCentre.add(shift);
polygons[i].realCentre.y+=height;
polygons[i].findDiffuse();
for(int j = 0; j < 4; j++){
polygons[i].vertix3D[j].subtract(start);
polygons[i].vertix3D[j].subtract(shift);
polygons[i].vertix3D[j].rotateXZ();
polygons[i].vertix3D[j].add(start);
polygons[i].vertix3D[j].add(shift);
polygons[i].vertix3D[j].y+=height;
polygons[i].vertixNormals[j].rotateXZ();
}
}
}
public vector put(double i, double j, double k){
vector temp = new vector(0,0,0);
temp.set(start);
temp.add(iDirection, i);
temp.add(jDirection, j);
temp.add(kDirection, k);
return temp;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -