Je veux générer une piste de course en 3 dimensions autour d'une spline qui décrit sa forme. Voici une vidéo illustrative .
La piste devrait être un tunnel sans fin qui longe une spline 3D, avec quelques obstacles jetés. Ma meilleure idée jusqu'à présent a été de créer une forme de cercle le long de la spline.
Je voudrais également quelques conseils sur la façon de gérer la géométrie, c'est-à-dire comment la créer à partir de l'opération loft, gérer son «cycle de vie» en mémoire, collision et texturation.
opengl
3d
racing
procedural
Valentin Galea
la source
la source
Réponses:
Je ne sais pas dans quelle langue vous travaillez, mais il existe un exemple d'extrusion de maillage procédural pour Unity3D situé ici:
http://unity3d.com/support/resources/example-projects/procedural-examples
Je suis sûr que vous pourriez regarder le code et le retravailler pour votre situation.
EDIT: Je travaille sur un jeu qui utilise un système de rail extrudé procédural comme celui que vous démarrez, mais il est en C # dans Unity3d. Je vais vous donner un aperçu de la façon dont je crée mon extrusion de rail en fonction d'un chemin de Bézier cubique, donc bien que le maillage du rail soit généré de manière procédurale, il est basé sur le chemin de Bézier que je définis à l'avance dans un éditeur. Ce serait comme un éditeur de niveau dans le cas de votre jeu, dans mon cas, c'est la conception de flippers. Voici un exemple de la façon dont je le fais:
1.) Construire / rechercher et implémenter une classe de chemin de Bézier. Cela vous donnera les données source pour votre extrusion de maillage. Il y en a un en C # ici que vous pouvez porter en c ++.
http://forum.unity3d.com/threads/32954-Waypoints-and-constant-variable-speed-problems?p=213942
2.) Une fois que vous avez créé un chemin de Bézier, les points de données de ce chemin sont échantillonnés. Cela peut être fait via la méthode Interp sur la classe fournie ci-dessus. Cela vous donnera une liste / tableau de points Vector3 le long du chemin de Bézier.
3.) Créez une classe d'assistance pour convertir les données de chemin de Bézier Vector3 de l'étape 2. Dans ce cas, j'ai une classe simple appelée ExtrudedTrailSection comme défini ci-dessous:
4.) Parcourez vos données d'exemple Vector3 et convertissez-les en un tableau d'ExtrudedTrailSections en lui fournissant les données d'exemple et une matrice de base qui serait l'emplacement racine de votre maillage extrudé.
Matrix4x4 worldToLocal = rootTransform.worldToLocalMatrix;
6.) Vous avez maintenant un tableau de Matrix4x4 [] et vous pouvez extruder un maillage, mais nous avons d'abord besoin d'un maillage de référence pour extruder. J'ai une classe d'utilité qui créera une face de maillage circulaire que nous fournirons à la méthode d'extrusion de maillage.
7.) Trouvez le centre de ces données:
8.) Maintenant que nous avons les données d'arête et de centre pour un maillage de face radiale, vous pouvez construire un objet maillé à l'aide de vos données. Le sommet final du maillage est le point central que nous avons calculé. Le maillage final est juste une face qui est fournie à la méthode d'extrusion de maillage dont j'ai fourni un exemple dans la classe d'extrusion de maillage procédural du package Unity. Encore une fois, c'est ma méthode et, évidemment, vous devrez alimenter ces données dans OpenGL. Si vous avez une bibliothèque d'utilitaires 3D que vous utilisez ou pouvez écrire votre propre classe de maillage, cela fonctionnerait probablement mieux pour générer votre maillage extrudé final car ces données ne sont pas vraiment nécessaires à opengl pour le rendu. Ce maillage de face est juste utilisé comme référence pour l'extrusion du maillage.
9.) Trouvez les bords extérieurs du maillage circulaire selon les besoins par la méthode d'extrusion du maillage. Encore une fois, ce code est fourni dans le package d'unité.
10.) Alimentez toutes ces données dans la méthode d'extrusion de maillage.
La sortie finale dans mon cas ressemble à ceci ..
Bonne chance, votre jeu est vraiment cool! Faites-moi savoir si vous le comprenez?
Mandrin
la source