| Bonjour à tous
Après avoir programmé en Java (normal et Android), j'ai décidé de me tourner vers la programmation Gambas. (J'utilise la version 3, et je programme depuis un Fedora 17, architecture 64 bits).
Je suis en train d'écrire un module contenant les principales fonctions géométriques de la librairie OpenGL FreeGlut (tores, spheres, cones, cubes).
Le soucis que je rencontre en ce moment viens de l'utilisation des tableaux multidimensionnels : => J'ai essayé d'initialiser un tableau du genre couleurs[6,3] (Float) avec le code suivant dans le module main:
1
2
3
4
5
6
7
8
9
10
11
| PRIVATE colors AS NEW FLOAT[6, 3] PUBLIC SUB Main() colors = 8, 0.8, 1.0, 1.0}, 0, 1.0, 0.0, 1.0}, 0, 0.0, 0.0, 1.0}, 0, 0.0, 1.0, 1.0}, 0, 1.0, 0.0, 1.0}, 0, 1.0, 1.0, 1.0} } END
|
Ceci pour éviter de devoir déclarer les éléments du tableau un à un, un peu comme en C/C++/Java. Mais la syntaxe n'est pas acceptée : il y aurait donc un autre moyen d'y parvenir ?
D'autres part, j'ai voulu utiliser le tableau colors (en enlevant l'initialisation précédente) dans un méthode personnelle, mais la syntaxe m'a été refusée :
1
| PUBLIC SUB solidCubeWithDifferentColors(dimension AS FLOAT, colors AS FLOAT[, ])
|
Comment alors déclarer le tableau à deux dimensions dans la signature de ma méthode ?
Je vous remercie d'avance
Laurent |
| C'est bon j'ai trouvé, en allant fouiller du côté de la mailing list officielle de Gambas : => Voici comment je déclare et initialise le tableau colors dans le module main :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| ' Gambas module file
'... PRIVATE colors AS NEW Float[][]
PUBLIC SUB Main() '... ' les doubles crochets ne sont pas une erreur de frappe : c'est obligatoire dans le cas présent !!! colors.Insert([[1.0, 0.4, 0.0, 1.0]]) 'colors[0] = [1.0, 0.4, 0.0, 1.0] colors.Insert([[1.0, 1.0, 0.0, 1.0]]) 'colors[1] = [1.0, 1.0, 0.0, 1.0] colors.Insert([[1.0, 0.0, 0.0, 1.0]]) 'colors[2] = [1.0, 0.0, 0.0, 1.0] colors.Insert([[0.0, 1.0, 0.0, 1.0]]) 'colors[3] = [0.0, 1.0, 0.0, 1.0] colors.Insert([[0.0, 1.0, 0.0, 1.0]]) 'colors[4] = [0.0, 1.0, 0.0, 1.0] colors.Insert([[1.0, 1.0, 1.0, 1.0]]) 'colors[5] = [1.0, 1.0, 1.0, 1.0] END
|
Et voici un extrait de la méthode qui s'en sert :
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
| ' Gambas module file '...
'Draws a solid cube, with custom colors per faces (custom routine) 'colors much have 6 arrays of 4 floats => red, green, blue and alpha 'colors[0] is for face right 'colors[1] is for face top 'colors[2] is for face front 'colors[3] is for face left 'colors[4] is for face bottom 'colors[5] is for face back PUBLIC SUB solidCubeWithDifferentColors(dimension AS FLOAT, colors AS Float[][]) '... gl.Begin(Gl.QUADS) ' right face gl.Normal3f(1.0, 0.0, 0.0) gl.Colorfv(colors[0]) gl.Vertex3f(size, - size, size) gl.Vertex3f(size, - size, - size) gl.Vertex3f(size, size, - size) gl.Vertex3f(size, size, size)
' top face gl.Normal3f(0.0, 1.0, 0.0) gl.Colorfv(colors[1]) gl.Vertex3f(size, size, size) gl.Vertex3f(size, size, - size) gl.Vertex3f(- size, size, - size) gl.Vertex3f(- size, size, size) ' front face gl.Normal3f(0.0, 0.0, 1.0) gl.Colorfv(colors[2]) gl.Vertex3f(size, size, size) gl.Vertex3f(- size, size, size) gl.Vertex3f(- size, - size, size) gl.Vertex3f(size, - size, size) ' left face gl.Normal3f(-1.0, 0.0, 0.0) gl.Colorfv(colors[3]) gl.Vertex3f(- size, - size, size) gl.Vertex3f(- size, - size, - size) gl.Vertex3f(- size, size, - size) gl.Vertex3f(- size, size, size)
' bottom face gl.Normal3f(0.0, -1.0, 0.0) gl.Colorfv(colors[4]) gl.Vertex3f(size, - size, size) gl.Vertex3f(size, - size, - size) gl.Vertex3f(- size, - size, - size) gl.Vertex3f(- size, - size, size) ' back face gl.Normal3f(0.0, 0.0, -1.0) gl.Colorfv(colors[5]) gl.Vertex3f(size, size, - size) gl.Vertex3f(- size, size, - size) gl.Vertex3f(- size, - size, - size) gl.Vertex3f(size, - size, - size) gl.End() END
|
|