Surfaces déformantes

10

J'essaie d'accomplir un comportement physique déformant pour des surfaces planes, mais je n'ai aucune idée de comment commencer par la mise en œuvre jusqu'à présent.

Quelle que soit la forme de la surface (plans, cubes, sphères…), je souhaite avoir de petites indentations aux positions des entités de jeu (joueurs, ennemis, objets…).

C'est un peu compliqué à expliquer, donc j'ai illustré de quoi je parle, voici un exemple avec une sphère:

jeu de surface déformant illustration

Ainsi, les surfaces devraient pouvoir se déformer un peu (pour apparaître comme un lit ou un canapé vraiment moelleux). Mes surfaces ont probablement besoin d'un nombre élevé de sommets pour obtenir une déformation régulière, mais mon gros problème est le calcul pour calculer cette déformation.

Je programme en C / C ++ avec OpenGL, mais tout conseil dans la bonne direction ira bien.

Constantin
la source

Réponses:

5

Pour une déformation simple, vous pouvez choisir un point sur la surface / l'objet à manipuler, puis lui appliquer une transformation (par exemple une translation). Ensuite, transformez tous les points à une certaine distance de ce point de la même manière, mais ayez la force lâche de transformation plus loin du point choisi que vous êtes.

Donc, pour mettre des éléments en retrait sous un personnage, choisissez le point sur lequel il se tient et déplacez-le vers le bas.

Selon l'effet que vous souhaitez archiver, vous pouvez appliquer la transformation globalement, localement ou vers / loin du centre de l'objet et / ou utiliser différentes fonctions pour simuler différents matériaux.

Un exemple simple de mise en retrait d'un plan à l'aide des fonctions d'atténuation sin / cos peut être trouvé sur www.lighthouse3d.com/opengl/terrain/

Exilyth
la source
1
J'obtiens une erreur interdite 403 sur le lien.
George Duckett
1
Eh bien ... 'lil hack est en ordre alors (aussi, directement à la section en question): web.archive.org/web/20100927141645/http://lighthouse3d.com/…
Exilyth