Gambas France BETA


Pas de compte ? Incription

[Gambas3] Tableaux à plusieures dimensions: initialisation et déclaration pour procédure

Ce sujet est résolu.

1
AuteurMessages
loloof64#1 Posté le 2/7/2012 à 15:16:52
Bonjour à tous :D

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 = {
{0.8, 0.8, 1.0, 1.0},
{1.0, 1.0, 0.0, 1.0},
{1.0, 0.0, 0.0, 1.0},
{0.0, 0.0, 1.0, 1.0},
{0.0, 1.0, 0.0, 1.0},
{1.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
loloof64#2 Posté le 2/7/2012 à 16:53:32
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
1