-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathIsocaedre.java
More file actions
120 lines (102 loc) · 3.01 KB
/
Isocaedre.java
File metadata and controls
120 lines (102 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package planetsWars;
import javax.media.opengl.GL2;
public class Isocaedre extends VBOModel {
private double x;
private double y;
private double z;
private int it=0;
private Material material;
public Isocaedre(GL2 gl) {
super(gl, 12, 20);
material = new Material();
material.setAmbient(new float[]{
0.0215f, 0.1745f, 0.0215f
});
material.setDiffuse(new float[]{
0.07568f, 0.61424f, 0.07568f
});
material.setSpecular(new float[]{
0.633f, 0.727811f, 0.633f
});
material.setShininess(new float[]{
0.6f, 0.6f, 0.6f
});
prepare(gl);
}
@Override
public void build() {
//point le plus "bas"
vertices[0] = 0;
vertices[1] = 0;
vertices[2] = 0;
//première "couche"
//pi/3 = 1,047197
for (int i=3; i<18; i+=3) {
vertices[i] = Math.cos(1.256637*(i/3))/2;
vertices[i+1] = 0.333333;
vertices[i+2] = Math.sin(1.256637*(i/3))/2;
}
//seconde "couche"
//pi/6 = 1,570796
for (int i=18; i<33; i+=3) {
vertices[i] = Math.cos(1.256637*(i/3)+0.523598)/2;
vertices[i+1] = 0.666666;
vertices[i+2] = Math.sin(1.256637*(i/3)+0.523598)/2;
}
//point le plus "haut"
vertices[33] = 0;
vertices[34] = 1;
vertices[35] = 0;
/**Génération des faces**/
//faces "haut" et "bas"
for (int i=0; i<30; i+=3) {
if (i < 15)
edges[i] = 0;
else
edges[i] = 11;
edges[i+1] = (i/3)+1;
if (i==12) {
edges[i+2] = 1;
}
else if (i==27) {
edges[i+2] = 6;
}
else {
edges[i+2] = (i/3)+2;
}
//On "retourne" le triangle pour plaquer
//la face du bon côté
if (i >= 15) {
int tmp = edges[i];
edges[i] = edges[i+2];
edges[i+2] = tmp;
}
}
//faces au "centre"
for (int i=30; i<60; i+=3) {
if (i%6 == 0) {
edges[i+2] = 5+((1+(i/6-5))%6);
edges[i+1] = 1+((i/6-5)%5);
edges[i] = 1+((1+(i/6-5))%5);
}
else {
edges[i] = 1+((1+(i/6-5))%5);
edges[i+1] = 5+((1+(i/6-5))%6);
edges[i+2] = 6+((1+(i/6-5))%5);
}
}
super.build();
}
@Override
public void display(GL2 gl) {
it++;
//gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE);
gl.glRotated(it*0.1, 0.0, 0.0, 1.0);
gl.glTranslated(20, 0, 0);
gl.glRotated(it, 0.0, 1.0, 0.0);
gl.glScaled(5.0+Math.cos(it*0.05), 5.0+Math.cos(it*0.05), 5.0+Math.cos(it*0.05));
//matériaux
material.displayMaterial(gl);
super.display(gl);
}
}