pragma Warnings (Off);
pragma Style_Checks (Off);
— Space vehicle #001 3D model. Copyright (c) Gautier de Montmollin 1999 – 2000
— CH – 2000 Neuchatel
— SWITZERLAND
— Permission granted to use the herein contained 3D model for any purpose,
— provided this copyright note remains attached and unmodified.
with GL;
package body Vehic001_P is
procedure Create (
Object : in out GLOBE_3D.p_Object_3D;
Scale : GLOBE_3D.Real;
Centre : GLOBE_3D.Point_3D
)
is
use GL, GLOBE_3D;
— matos : Material_type;
polys : constant array (1 .. 101, 1 .. 4) of Natural :=
— Here, clockwise !
(1 => (2, 1, 3, 4), 2 => (4, 3, 6, 7), 3 => (7, 6, 9, 10),
4 => (10, 9, 11, 12), 5 => (12, 11, 14, 16), 6 => (16, 14, 19, 15), — zebr. hg
— 7 => (14, 13, 23, 21) passait devant 17
7 => (14, 17, 23, 21), 94 => (14, 13, 17, 0),
8 => (14, 21, 22, 19),
9 => (56, 49, 54, 57),
— 10 => (21, 25, 79, 74) passait devant 22
10 => (21, 25, 22, 0), 90 => (25, 79, 22, 0), 91 => (79, 74, 22, 0),
11 => (21, 23, 27, 25),
12 => (27, 23, 33, 34),
13 => (25, 27, 34, 35), — fusel hg
14 => (24, 25, 35, 29), — aile hg
— 15 => (1, 36, 41, 6) passait devant 3, 5, 85, 40, 38
15 => (1, 36, 85, 0), 98 => (1, 85, 5, 3), 99 => (85, 36, 38, 40),
100 => (6, 3, 5, 0), 101 => (40, 38, 41, 0),
16 => (6, 5, 8, 9), 17 => (40, 41, 44, 43), — appui vitre
18 => (36, 37, 39, 38), 19 => (38, 39, 42, 41), 20 => (41, 42, 45, 44),
21 => (44, 45, 47, 46), 22 => (46, 47, 51, 49), 23 => (49, 51, 50, 54), — zebr hd
— 24 => (48, 49, 56, 58) passait devant 52
24 => (52, 49, 56, 58), 95 => (48, 49, 52, 0),
25 => (61, 18, 78, 26), — sous 27
26 => (20, 76, 78, 18), — sous 24
27 => (56, 60, 62, 58), 28 => (62, 66, 65, 58),
29 => (60, 67, 66, 62), — fusel hd
30 => (35, 32, 87, 82), — react. g.
31 => (17, 52, 58, 23), — Centre h
32 => (32, 67, 89, 87), — react d.
33 => (23, 58, 65, 33),
34 => (13, 48, 52, 17),
— 35 => (33, 30, 31, 34), 36 => (30, 65, 66, 31), — face 31 passait devant 30
35 => (33, 0, 31, 34), 36 => (0, 65, 66, 31), 96 => (33, 65, 31, 0),
37 => (34, 31, 32, 35), 38 => (31, 66, 67, 32), — arr. react h
39 => (60, 59, 64, 67), — aile hd
— 40 => (60, 56, 18, 61) passait devant 57
40 => (60, 56, 57, 0), 92 => (61, 60, 57, 0), 93 => (61, 57, 18, 0),
41 => (14, 8, 96, 13), 42 => (13, 96, 97, 48), 43 => (97, 43, 49, 48), — cockpit
44 => (68, 2, 4, 69), 45 => (69, 4, 7, 70), 46 => (70, 7, 10, 71),
47 => (71, 10, 12, 72), 48 => (72, 12, 16, 73),
49 => (73, 16, 15, 19), — zebr bg
50 => (19, 22, 74, 73),
51 => (73, 74, 77, 75),
52 => (76, 75, 77, 78), 53 => (64, 59, 92, 90),
54 => (77, 74, 79, 80),
55 => (77, 80, 83, 84),
56 => (80, 79, 82, 83), — aile bg
57 => (79, 25, 24, 28), 58 => (24, 29, 81, 28),
59 => (29, 35, 82, 81),
60 => (87, 86, 83, 82), 61 => (87, 89, 88, 86),
— 62 => (86, 85, 84, 83), 63 => (86, 88, 91, 85) face 78 passait devant 85
62 => (86, 0, 84, 83), 63 => (86, 88, 91, 0), 97 => (84, 86, 91, 0),
64 => (67, 64, 90, 89),
65 => (60, 61, 92, 59),
66 => (92, 61, 89, 90), — aile bd
67 => (61, 26, 88, 89),
68 => (18, 57, 54, 20),
69 => (54, 50, 51, 20),
70 => (20, 51, 47, 53),
71 => (53, 47, 45, 55),
72 => (45, 42, 93, 55), 73 => (42, 39, 94, 93),
74 => (39, 37, 95, 94), — zebr bd
75 => (5, 85, 96, 8), 76 => (85, 40, 43, 97), — lucarnes cockpit
77 => (82, 79, 28, 81), — sous aile g
78 => (84, 91, 78, 77), — sous 33:rc
79 => (91, 88, 26, 78), — sous 28
80 => (75, 76, 20, 73), — “entree air”
81 => (73, 20, 93, 70), — sous cockpit
82 => (70, 93, 95, 68), — sous l’avant
83 => (1, 2, 68, 30), 84 => (30, 68, 95, 63), — nez
85 => (63, 95, 37, 36), 86 => (63, 36, 1, 30), — nez
87 => (9, 8, 14, 0), 88 => (43, 44, 49, 0), — triangles plateau cockpit cf 16, 17
89 => (96, 85, 97, 0) — triangle pointe cockpit devant 42
);
coords : constant array (1 .. 97, 0 .. 2) of Integer :=
(1 => ( – 10, 360, 10),
2 => ( – 20, 360, 0),
3 => ( – 20, 330, 12),
4 => ( – 30, 330, 0),
5 => ( – 10, 300, 14),
6 => ( – 30, 300, 14),
7 => ( – 40, 300, 0),
8 => ( – 20, 270, 16),
9 => ( – 30, 270, 16),
10 => ( – 50, 270, 0),
11 => ( – 30, 240, 18),
12 => ( – 60, 240, 0),
13 => ( – 20, 220, 30),
14 => ( – 30, 210, 20),
15 => ( – 40, 200, 0),
16 => ( – 70, 210, 0),
17 => ( – 20, 200, 30),
18 => (30, 120, – 20),
19 => ( – 31, 200, 0),
20 => (30, 210, – 20),
21 => ( – 30, 120, 20),
22 => ( – 31, 120, 0),
23 => ( – 20, 110, 30),
24 => ( – 110, 110, 1),
25 => ( – 50, 100, 1),
26 => (40, 90, – 10),
27 => ( – 40, 90, 10),
28 => ( – 110, 110, – 1),
29 => ( – 120, 50, 1),
— 30 => (0, 7, 40),
31 => (0, 0, 20),
32 => (0, 0, 10),
33 => ( – 20, 7, 40),
34 => ( – 40, 0, 10),
35 => ( – 60, 0, 2), — fin hg
36 => (10, 360, 10),
37 => (20, 360, 0),
38 => (20, 330, 12),
39 => (30, 330, 0),
40 => (10, 300, 14),
41 => (30, 300, 14),
42 => (40, 300, 0),
43 => (20, 270, 16),
44 => (30, 270, 16),
45 => (50, 270, 0),
46 => (30, 240, 18),
47 => (60, 240, 0),
48 => (20, 220, 30),
49 => (30, 210, 20),
50 => (40, 200, 0),
51 => (70, 210, 0),
52 => (20, 200, 30),
53 => (30, 240, – 18),
54 => (31, 200, 0),
55 => (30, 270, – 16),
56 => (30, 120, 20),
57 => (31, 120, 0),
58 => (20, 110, 30),
59 => (110, 110, 1),
60 => (50, 100, 1),
61 => (50, 100, – 1),
62 => (40, 90, 10),
63 => (4, 366, 0),
64 => (120, 50, 1),
65 => (20, 7, 40),
66 => (40, 0, 10),
67 => (60, 0, 2), — fin hd
68 => ( – 10, 360, – 10), — debut bas g
69 => ( – 20, 330, – 12),
70 => ( – 30, 300, – 14),
71 => ( – 30, 270, – 16),
72 => ( – 30, 240, – 18),
73 => ( – 30, 210, – 20),
74 => ( – 30, 120, – 20),
75 => ( – 20, 210, – 30),
76 => (20, 210, – 30),
77 => ( – 20, 110, – 30),
78 => (20, 110, – 30),
79 => ( – 50, 100, – 1),
80 => ( – 40, 80, – 10),
81 => ( – 120, 50, – 1),
82 => ( – 60, 0, – 2),
83 => ( – 40, 0, – 10),
84 => ( – 20, 7, – 40),
— 85 => (0, 7, – 40),
86 => (0, 0, – 20),
87 => (0, 0, – 10),
88 => (40, 0, – 10),
89 => (60, 0, – 2),
90 => (120, 50, – 1),
91 => (20, 7, – 40),
92 => (110, 110, – 1),
93 => (30, 300, – 14),
94 => (20, 330, – 12),
95 => (10, 360, – 10),
96 => ( – 10, 270, 17),
97 => (10, 270, 17),
30 => ( – 4, 366, 0),
85 => (0, 300, 14)
);
colour : GL.RGB_Color;
corr : constant Vector_3D := (0.0, 160.0, 0.0);
face_0 : Face_type; — takes defaults values
begin
face_0.skin := colour_only;
Object :=
new Object_3D (Max_points => 97,
Max_faces => polys’Length (1));
for i in coords’Range loop
for d in Point_3D’Range loop
Object.point (i) (d) := Scale * 0.1 * (Real (coords (i, d)) – corr (d));
end loop;
end loop;
for i in polys’Range (1) loop
case i is
when 2|4|6|19|21|23|44|46|48|70|72|74 =>
colour := (1.0, 1.0, 0.1); — jaune
–matos := very_bright;
when 1|3|5|18|20|22|45|47|49|69|71|73 =>
colour := (0.1, 0.1, 0.5); — bleu f.
–matos := very_bright;
when 34 =>
colour := (0.3, 0.11, 0.11); — rouge
–matos := neutral;
when 41 .. 43|75|76|89 =>
colour := (0.13, 0.2, 0.2); — vitre cockpit
–matos := very_bright;
when 30|32 =>
colour := (1.0, 0.8, 0.1); — orange
–matos := neutral;
when 83 .. 86 =>
colour := (0.1, 0.2, 0.4); — museau
–matos := neutral;
when others =>
colour := (0.8, 0.8, 1.0); — caisse
–matos := bright;
end case;
face_0.colour := colour;
face_0.P := (polys (i, 1), polys (i, 4), polys (i, 3), polys (i, 2));
Object.face (i) := face_0;
end loop;
Object.Centre := Centre;
Set_name (Object.all, “vehicle_001”);
end Create;
end Vehic001_P;