Fare una maglia personalizzata in C # gestito DirectX
Domanda
Ho bisogno di fare una mesh 3D DirectX in fase di esecuzione utilizzando Managed DirectX da C #. Non sono stato in grado di individuare tutte le informazioni su come fare questo.
- No, non posso utilizzare un programma modellatore 3D per fare i miei oggetti. Devono essere proprio di dimensioni e di forma, e io non ho alcun delle dimensioni o la forma informazioni fino a runtime.
- No, non posso costruire il modello dalla capacità di maglia DirectX esistenti. (Un semplice esempio: DirectX sarebbe consentono di modellare facilmente una matita utilizzando una maglia cono e una maglia cilindri Naturalmente, si deve portare circa due maglie per la matita, non uno solo, e correttamente la posizione e orientare ogni Ma.. non può anche fare un modello di una spaccatura matita a metà longitudinalmente in quanto non v'è alcun mezzo cilindro né maglia cono mezzo disponibile.)
- In fase di runtime, ho tutti i vertici già calcolati e so che quelli per la connessione a fare i triangoli necessari.
- Tutto quello che serve è un colore solido. Non ho bisogno di texture map.
Si può ottenere una maglia di una sfera utilizzando questa chiamata DirectX:
Mesh sphere = Mesh.Sphere(device, sphereRadius, sphereSlices, sphereStacks);
Questa rete è costruito in fase di esecuzione.
Quello che ho bisogno di sapere è come fare una funzione simile:
Mesh shape = MakeCustomMesh(device, vertexlist, trianglelist);
dove le due liste potrebbero essere qualsiasi contenitore / formato adatto.
Se qualcuno mi può puntare a DirectX codice di esempio gestito (C #), anche se è solo costruisce una maglia da 3 triangoli hardcoded, che sarebbe un grande vantaggio.
Soluzione
C'è un po 'di codice di esempio che mostra come fare questo su MDXInfo . Questo crea una rete con più sottoinsiemi -. Se non hai bisogno di questo, è ancora più facile
In pratica, basta creare la mesh:
Mesh mesh = new Mesh(numIndices, numVerticess, MeshFlags.Managed, CustomVertex.PositionColored.Format /* you'll need to set this */ , device);
Quindi, si può afferrare il buffer maglia vertice e index buffer, e sovrascrive, utilizzando:
IndexBuffer indices = mesh.IndexBuffer;
VertexBuffer vertices = mesh.VertexBuffer;
Poi, compilare indici e vertici appropriato.