Pages: [1] 2 3   Bas de page
Imprimer
Auteur Fil de discussion: Gestion de fluide ou solide déformable…  (Lu 3517 fois)
0 Membres et 1 Invité sur ce fil de discussion.
Sheeft Hors ligne
Petit slip
Vraiment petit
*
Messages: 923


Voir le profil WWW
sexe : oui (ndPyroh : Ouais ouais...)

« 25 Février 2010, 17:36:54 »

Salut à tous,

Je me posais une question existentielle et dont la réponse semble indispensable à la continuation de mon jeu de Wii…
Donc je venais ici requérir votre avis :

Comment gérer une sorte de solide visqueux qui se déformerai dans le jeu ?
Là, je doute que l'utilisation de tiles est la bonne chose à faire, il y aurait trop de possibilité à gérer…  Surtout que je compte le laisser faire par l'utilisateur.

Après, ce que je veux déformer est un truc pas trop compliqué donc ça doit simplifier les choses, je sais pas, s'il est possible de donner une forme avec une texture qui se répèterai et seulement limitée par un contour (pour donner plus une impression d'unité)…
C'est une chose à laquelle j'ai jamais vraiment touché mais ça me semblait possible mais je vois pas trop comment… Alors si vous pouviez me donner des pistes, si possibles compatibles avec la MLlib (et demandant pas d'utiliser de la 3D - à moins que ça me demande pas d'apprendre trop de trucs), ça serait sympa merci Cheesy
Journalisée


Pas si petit…
Minishlink Hors ligne
Mega Member
***
Messages: 1439


Voir le profil WWW
Quand on veut, on peut !

« Réponse #1 : 25 Février 2010, 17:45:10 »

Ça me semble pas très possible à faire sans la 3D ton truc Shocked (mais je ne sais pas te dire comment faire par contre x] )
Journalisée

morukutsu Hors ligne
Sr. Member
****
Messages: 499


Voir le profil
Noctambule

« Réponse #2 : 25 Février 2010, 17:46:49 »

En théorie : http://cowboyprogramming.com/2007/01/05/blob-physics/

En pratique : http://slurm.biz/temp/softbody/

Après si tu veux que ce soit l'utilisateur qui définisse la forme du truc, tu pourrais avoir des surprises. Faut tester smiley
Journalisée
Sheeft Hors ligne
Petit slip
Vraiment petit
*
Messages: 923


Voir le profil WWW
sexe : oui (ndPyroh : Ouais ouais...)

« Réponse #3 : 25 Février 2010, 17:57:58 »

Merci, je crois qu'il va falloir que je me penche pas mal dessus pour comprendre le fonctionnement et l'adapter à ce que je veux faire.

En vrai, je veux que l'utilisateur puisse tirer sur les bords et lui donner une forme comme de la pâte à modeler. Je sens que je vais passer un moment dessus x)
Journalisée


Pas si petit…
morukutsu Hors ligne
Sr. Member
****
Messages: 499


Voir le profil
Noctambule

« Réponse #4 : 25 Février 2010, 18:10:24 »

Dac donc c'est pas exactement un blob.

Pour ce que tu veux faire je pense que le mieux c'est de démarrer d'un contour de rond formé d'un certain nombre de vertices. Ensuite tu déplace les points suivant la position du pointeur.

Par contre, au moment ou tu voudra détecter les collision avec le contour ou afficher une forme pleine tu pourra avoir quelques soucis.
Soit la forme est restée convexe (ça n'arrivera jamais  Grin) dans ce cas tu peux appliquer directement un algo de collision style axe séparateur.
Soit la forme est devenue concave. Dans ce cas il faudra essayer de la décomposer en polygones convexes ou en triangle. Un algorithme de triangulation tel que Delaunay me paraît adapté.

Pour l'affichage dans tout les cas au moment ou tu voudra faire une forme pleine il faudra t'arranger pour générer un triangle strip, à moins que GX ne gère les polygones concaves...

Citation
Je sens que je vais passer un moment dessus x)
Good luck  Azn
Journalisée
Sheeft Hors ligne
Petit slip
Vraiment petit
*
Messages: 923


Voir le profil WWW
sexe : oui (ndPyroh : Ouais ouais...)

« Réponse #5 : 25 Février 2010, 18:14:16 »

D'accord, enfin le blob aurait pu être intéressant quand même parce que je veux que mon "truc" obéisse au loi de la physique : histoire que ma forme tombe si y'a trop de poids d'un côté…

Je peux gérer des polygones avec la MLlib ? Huh?

Merci Cheesy
Journalisée


Pas si petit…
Minishlink Hors ligne
Mega Member
***
Messages: 1439


Voir le profil WWW
Quand on veut, on peut !

« Réponse #6 : 25 Février 2010, 18:19:09 »

Tu peux utiliser GX pour faire des polygones Wink (la MLlib te permet de faire des carrés et rectangles, mais vu que ça sert à rien j'avais eu la flemme de faire toutes les autres formes, même si c'est très simple)
Journalisée

morukutsu Hors ligne
Sr. Member
****
Messages: 499


Voir le profil
Noctambule

« Réponse #7 : 25 Février 2010, 18:24:30 »

Vu que c'est très simple tu peux le rajouter Langue
Journalisée
Sheeft Hors ligne
Petit slip
Vraiment petit
*
Messages: 923


Voir le profil WWW
sexe : oui (ndPyroh : Ouais ouais...)

« Réponse #8 : 25 Février 2010, 18:25:16 »

Okay, c'est inclu par défaut avec ta lib ?
Possibilité d'utiliser des textures ?

Merci beaucoup, va falloir que je jette un oeil à la doc de GX donc Smiley
Journalisée


Pas si petit…
Minishlink Hors ligne
Mega Member
***
Messages: 1439


Voir le profil WWW
Quand on veut, on peut !

« Réponse #9 : 25 Février 2010, 18:42:42 »

Vu que c'est très simple tu peux le rajouter Langue
Ouai, quand j'aurais le temps Langue

Okay, c'est inclu par défaut avec ta lib ?
Possibilité d'utiliser des textures ?
Ma lib utilise GX vu que GX c'est libogc en fait. Wink
Et oui c'est possible d'utiliser des textures, mais c'est sûrement plus compliqué avec des formes complexes... (ou tu fais pas d'UV-mapping)

Un petit exemple avec la MLlib qui devrait fonctionner (pas testé) et qui devrait afficher un triangle:
Code: (c)
// à placer dans la boucle comme si t'affichait un sprite
Mtx44 m, m1, m2, mv;

// ??? GX_SetTevOp(GX_TEVSTAGE0, GX_MODULATE);
// ??? GX_SetVtxDesc(GX_VA_TEX0, GX_DIRECT);

// Là ce sont les transformations pour le changement d'échelle, la rotation et la translation.
guMtxIdentity (m1);
guMtxScaleApply(m1, m1, scaleX, scaleY, 1.0);
guVector axis = (guVector) {0, 0, 1};
guMtxRotAxisDeg (m2, &axis, angle);
guMtxConcat(m2, m1, m);
guMtxTransApply(m, m, screenX+width, screenY+height, 0);
guMtxConcat (GXmodelView2D, m, mv);
GX_LoadPosMtxImm (mv, GX_PNMTX0);

// Ici tu créé le triangle
GX_Begin(GX_TRIANGLES, GX_VTXFMT0, 3);
GX_Position1x8(0);
GX_Color1x8(0);
GX_Position1x8(1);
GX_Color1x8(1);
GX_Position1x8(2);
GX_Color1x8(2);
GX_End();
GX_LoadPosMtxImm(GXmodelView2D, GX_PNMTX0);

// ??? GX_SetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
// ??? GX_SetVtxDesc(GX_VA_TEX0, GX_NONE);
ML_Refresh();

Je sais pas si tu peux accéder à GXmodelView2D, faudra que t'inclues ta fonction dans le fichier ML_video.c si tu ne peux pas. Undecided
« Dernière édition: 25 Février 2010, 18:45:10 par Minishlink » Journalisée

morukutsu Hors ligne
Sr. Member
****
Messages: 499


Voir le profil
Noctambule

« Réponse #10 : 25 Février 2010, 18:51:38 »

Code: (c)
extern  Mtx GXmodelView2D;
 Azn
Journalisée
Minishlink Hors ligne
Mega Member
***
Messages: 1439


Voir le profil WWW
Quand on veut, on peut !

« Réponse #11 : 25 Février 2010, 19:11:22 »

Oui mais non,
Code: (c)
extern static Mtx GXmodelView2D;
Langue

Ça devrait fonctionner pour les utilisateurs, mais j'avais enlevé le "extern" quand j'avais tenté d'utiliser GXmodelView2D dans d'autres fichiers de la lib et que ça faisait des erreurs. Smiley
Journalisée

morukutsu Hors ligne
Sr. Member
****
Messages: 499


Voir le profil
Noctambule

« Réponse #12 : 25 Février 2010, 19:58:37 »

Oui mais là tu fais une variable globale. Cette solution fonctionne mais c'est pas très propre.
C'est pour ça que je trouve mieux de rajouter "extern Mtx GXmodelView2D;" dans chaque fichier source où j'utilise cette matrice.
Libre à toi de modifier la MLlib pour faire comme tu l'entends.

Mais imaginons que moi je m'étais servi de la MLlib et que j'avais ajouté ma ligne. Si jamais j'avais récupéré l'update de ta lib et bien mon code n'aurait plus compilé... à cause d'une variable globale.
Journalisée
Minishlink Hors ligne
Mega Member
***
Messages: 1439


Voir le profil WWW
Quand on veut, on peut !

« Réponse #13 : 25 Février 2010, 20:40:29 »

TODO-listé. Smiley
Journalisée

Sheeft Hors ligne
Petit slip
Vraiment petit
*
Messages: 923


Voir le profil WWW
sexe : oui (ndPyroh : Ouais ouais...)

« Réponse #14 : 25 Février 2010, 22:49:33 »

Dit moi, j'ai une question concernant scaleX et scaleY, ça correspond à quoi exactement ? Parce que je me doute bien que ça doit correspondre à l'échelle, mais y'a déjà dimensions et coordonnées donc je sais pas trop quelle valeurs sont attendues pour ces paramètres… Merci Smiley
(edit: Pareil pour screenX et Y, je dois mettre 640 et 480 ?)

Sinon, pour accéder à GXmodelView2D, je dois faire quoi finalement ? Je dois placer l'extern dans le fichier video.h ou dans mon propre fichier en fait ?

Merci encore Smiley

PS : @Morukutsu, tu voulais dire quoi par "vertice" ? Huh?
« Dernière édition: 26 Février 2010, 00:02:20 par Sheeft » Journalisée


Pas si petit…
Pages: [1] 2 3   Haut de page
Imprimer

Aller à: