Page 1 sur 1

Équivalence Tableau en C vs PB

Publié : dim. 24/janv./2010 17:59
par Guimauve
Bonjour à tous,

Je voudrais avoir la confirmation de l'équivalence sur l'organisation des données du code C suivant vers un équivalent PB sans passer par les tableaux standard (Dim) qui ne peuvent pas être imbriqué dans une structure de donnée. (Attention, je ne parle pas comment initialiser le tableau, je parle du résultat final entre les 2 codes)

Code : Tout sélectionner

GLfloat vertices[] = {1,1,1,  -1,1,1,  -1,-1,1,  1,-1,1,        // v0-v1-v2-v3
                       1,1,1,  1,-1,1,  1,-1,-1,  1,1,-1,        // v0-v3-v4-v5
                       1,1,1,  1,1,-1,  -1,1,-1,  -1,1,1,        // v0-v5-v6-v1
                      -1,1,1,  -1,1,-1,  -1,-1,-1,  -1,-1,1,    // v1-v6-v7-v2
                      -1,-1,-1,  1,-1,-1,  1,-1,1,  -1,-1,1,    // v7-v4-v3-v2
                       1,-1,-1,  -1,-1,-1,  -1,1,-1,  1,1,-1};   // v4-v7-v6-v5

Code : Tout sélectionner

Vertices.i = AllocateMemory(72*SizeOf(Float))
Merci à l'avance.
Guimauve

Re: Équivalence Tableau en C vs PB

Publié : lun. 25/janv./2010 10:55
par djes
Tiens. On voit là à quel point un code C peut être compact. Ce serait bien d'avoir une instruction de ce genre en PB pour remplir plus facilement des tableaux. Sinon, tu as un bon exemple opengl dans PB, qui montre comment créer des objets 'on the fly'

Code : Tout sélectionner

Macro GLfloat
f
EndMacro

Structure vertice
	x.GLfloat
	y.GLfloat
	z.GLfloat
EndStructure

*vertices.vertice = AllocateMemory(24 * SizeOf(vertice))

*myvert.vertice = ?MYVERT
For *i.vertice=*vertices To *vertices + 23 * SizeOf(vertice) Step SizeOf(vertice)
	*i\x = *myvert\x
	*i\y = *myvert\y
	*i\z = *myvert\z
	*myvert + SizeOf(vertice)
Next *i

End

DataSection

MYVERT:
Data.GLfloat 1,1,1,  -1,1,1,  -1,-1,1,  1,-1,1        ;// v0-v1-v2-v3
Data.GLfloat 1,1,1,  1,-1,1,  1,-1,-1,  1,1,-1        ;// v0-v3-v4-v5
Data.GLfloat 1,1,1,  1,1,-1,  -1,1,-1,  -1,1,1        ;// v0-v5-v6-v1
Data.GLfloat -1,1,1,  -1,1,-1,  -1,-1,-1,  -1,-1,1    ;// v1-v6-v7-v2
Data.GLfloat -1,-1,-1,  1,-1,-1,  1,-1,1,  -1,-1,1    ;// v7-v4-v3-v2
Data.GLfloat 1,-1,-1,  -1,-1,-1,  -1,1,-1,  1,1,-1		;   // v4-v7-v6-v5

EndDataSection 

Re: Équivalence Tableau en C vs PB

Publié : lun. 25/janv./2010 23:41
par Guimauve
Donc tu confirme que GLFloat vertice[] = {} en langage C revient à faire Vertice.i = AllocateMemory() avec PB.

C'est bien ce qu'il me semblait, apparemment les commandes OpenGL disponible sous Windows sont boguées, passer un bloc mémoire ne fonctionnait pas alors que passer les vertices 1 à 1 fonctionnait. Maintenant que je suis Linux Ubuntu 9.10 x64 à 99.9% je vais me remettre dans le développement d'un jeu 3D très sérieusement avant le retour dans l'arène prévu à la fin avril.

Merci à toi.

A+
Guimauve

Re: Équivalence Tableau en C vs PB

Publié : mar. 26/janv./2010 9:40
par djes
Oui, enfin j'ai utilisé un pointeur, et je ne suis pas un vrai spécialiste de l'opengl. Je ne sais pas si c'est si buggé... OpenGL est utilisé dans le milieu pro sur toutes les plateformes, mais c'est sûr que les implémentations diffèrent; cependant, on peut tester les capacités afin d'adapter son code.

Re: Équivalence Tableau en C vs PB

Publié : mar. 26/janv./2010 9:45
par flaith
Guimauve a écrit :...je vais me remettre dans le développement d'un jeu 3D très sérieusement avant le retour dans l'arène prévu à la fin avril...
Tie fighter :?: :D

Re: Équivalence Tableau en C vs PB

Publié : mar. 26/janv./2010 11:12
par cha0s
Guimauve a écrit :Donc tu confirme que GLFloat vertice[] = {} en langage C revient à faire Vertice.i = AllocateMemory() avec PB.

C'est bien ce qu'il me semblait, apparemment les commandes OpenGL disponible sous Windows sont boguées, passer un bloc mémoire ne fonctionnait pas alors que passer les vertices 1 à 1 fonctionnait.
tu a utilisé une DLL ? car la mémoire n'est pas partagé entre le programme et cette dernière ce qui donne une jolie erreur de segmentation (accès mémoire non autorisé), pareil si tu te trompe dans les tailles de buffer.

Re: Équivalence Tableau en C vs PB

Publié : mer. 27/janv./2010 1:44
par Guimauve
flaith a écrit :
Guimauve a écrit :...je vais me remettre dans le développement d'un jeu 3D très sérieusement avant le retour dans l'arène prévu à la fin avril...
Tie fighter :?: :D
Je ne sais pas trop ce que ça va donner, ça va être un mélange du jeu Descent 3 et du jeu X-Wing Alliance. Mais de tout façon, la manière dont je vois le projet il sera possible de faire des paquetages (modèles 3D, missions, etc) afin d'ajouter des histoires différentes autant qu'il y a de place sur le disque dur. Il n'y aura pas d'information "HARD CODED" dans l'exe comme c'est le cas pour les jeux de la série X-Wing, TIE Fighter, etc. De plus, j'espère que tu es un fan de Linux car je ne crois pas que je vais développer pour les autres plateformes. Personnellement, Windows 7, je travaille avec pendant 10-15 minutes et je perds le contrôle complètement.

Image
chaos a écrit :tu a utilisé une DLL ? car la mémoire n'est pas partagé entre le programme et cette dernière ce qui donne une jolie erreur de segmentation (accès mémoire non autorisé), pareil si tu te trompe dans les tailles de buffer.
Ce sont les commandes disponibles depuis l'API Windows, le dernier test remonte à Octobre 2008.

A+
Guimauve

Re: Équivalence Tableau en C vs PB

Publié : mer. 27/janv./2010 10:34
par flaith
Guimauve a écrit :...De plus, j'espère que tu es un fan de Linux car je ne crois pas que je vais développer pour les autres plateformes...
C'est le cas, et je ne peux que t'encourager dans cette voie, car il n'y a pas beaucoup de développement de jeux, ca bouge quand même mais ce n'est pas la panacée
J'attends vivement tes prochaines créations
:mrgreen: