2009-08-14 7 views
1

Je dois créer un maillage DirectX 3D à l'exécution en utilisant Managed DirectX à partir de C#. Je n'ai pas été capable de trouver des informations sur la façon de le faire.Création d'un maillage personnalisé en C# géré DirectX

  1. Non, je ne peux pas utiliser un programme de modélisation 3D pour créer mes objets. Ils doivent être précisément dimensionnés et façonnés, et je n'ai aucune information sur la taille ou la forme avant l'exécution. Non, je ne peux pas construire le modèle à partir des capacités de maillage DirectX existantes. (Un exemple simple: DirectX vous permet de modéliser facilement un crayon en utilisant un maillage de cône et un maillage de cylindre.Bien sûr, vous devez porter autour de deux mailles pour votre crayon, et pas seulement un, et positionner et orienter correctement chaque. Je ne peux même pas faire un modèle de crayon divisé en deux dans le sens de la longueur car il n'y a pas de demi-cylindre ni de demi-cône.)
  2. A l'exécution, tous les sommets sont déjà calculés et je sais lesquels connecter pour faire le nécessaire Triangles.
  3. Tout ce dont j'ai besoin est d'une couleur unie. Je n'ai pas besoin de texturer la carte.

On peut obtenir un maillage d'une sphère en utilisant cet appel DirectX:
Mesh sphere = Mesh.Sphere(device, sphereRadius, sphereSlices, sphereStacks);
Ce maillage est construit à l'exécution.

Ce que je dois savoir est comment faire une fonction similaire:
Mesh shape = MakeCustomMesh(device, vertexlist, trianglelist);
où les deux listes pourraient être tout récipient approprié/format.

Si quelqu'un peut pointer vers un exemple de code DirectX (C#) géré, même s'il ne fait que créer un maillage à partir de 3 triangles codés en dur, cela serait un grand avantage.

+0

Merci à Reed pour le démarrage nécessaire. Merci également à Jeff pour avoir édité ma question. Je n'arrive pas à croire que j'avais épelé "mal géré" deux fois, de deux manières différentes. C'était évidemment tard un vendredi. –

Répondre

6

Voici un exemple de code montrant comment faire cela sur MDXInfo. Cela crée un maillage avec plusieurs sous-ensembles - si vous n'en avez pas besoin, c'est encore plus facile.

Fondamentalement, il vous suffit de créer le maillage:

Mesh mesh = new Mesh(numIndices, numVerticess, MeshFlags.Managed, CustomVertex.PositionColored.Format /* you'll need to set this */ , device); 

Ensuite, vous pouvez récupérer le tampon de sommet de maillage et le tampon d'index, et le remplacer, en utilisant:

IndexBuffer indices = mesh.IndexBuffer; 
VertexBuffer vertices = mesh.VertexBuffer; 

Ensuite, remplissez le indices et sommets appropriés.

+0

Je viens de créer un mesh avec votre exemple, mais quand je l'ai exporté en utilisant la méthode 'ToXFile', il a échoué, je pense que des informations supplémentaires devraient être fournies au maillage créé dynamiquement afin qu'il puisse être sauvegardé en fichier x, vous avez fait la lumière sur ça? – zionpi