C'è una differenza nel metodo che disegna le "primitive".
device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices)e
device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 5, 0, 2);Si tratta di due metodi differenti.
Vediamo i parametri assunti dal primo.
device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices)
device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 5, 0, 2);Mentre il primo metodo, DrawUserPrimitives, prende come argomenti il tipo di primitiva, il numero di elementi da disegnare e i vertici,
il secondo, DrawIndexedPrimitives, prende come argomenti il tipo di primitiva, quattro numeri che devo ancora studiare e, da ultimo, il numero di elementi da disegnare.
Mancano i vertici.
Dove sono?
Ecco: ci sono due membri dell'oggetto Device:
device.SetStreamSource(0, vb, 0); device.Indices = ib;laddove vb sta per VertexBuffer, e ib sta per IndexBuffer
Quindi, prima, ci sono due oggetti, un VertexBuffer e un IndexBuffer, che vengono costruiti.
Mi sembra chiaro che DrawIndexedPrimitives prenda i suoi vertici dal membro device.Indices.
Da quello che ho capito il VertexBuffer contiene tutti i punti che vanno a fare da vertici, senza ripeterli quando essi siano uguali.
Costruiamo questo VertexBuffer...
Dim VBuffer As New VertexBuffer(GetType(CustomVertex.PositionColored),3,dispositivo,0,CustomVertex.PositionColored.Format,pool.Default)Non mi sono chiari tutti i parametri e il loro perchè...
Costruiamo i vertici...
Prima l'array;
Dim vertici As CustomVertex.PositionColored() = New CustomVertex.PositionColored(3) {}Quindi tutti i vertici, in questo caso tre:
vertici(0).Position = New Vector3(0, 0, 0) vertici(0).Color = Color.Blue.ToArgb vertici(1).Position = New Vector3(10, 0, 0) vertici(1).Color = Color.Red.ToArgb vertici(2).Position = New Vector3(0, 10, 0) vertici(2).Color = Color.Yellow.ToArgbDunque, creata la matrice di vertici, ossia CustomVertex.PositionColored, e creati i vertici, bisogna "associarli" in qualche modo a VertexBuffer.
Ed ecco che trovo questa istruzione:
VBuffer.SetData(vertici, 0, LockFlags.None)In sintesi:
- Creazione di VertexBuffer
- Creazione di un array di vertici
- "associazione" dell'array di vertici al VertexBuffer.
Adesso si deve creare un IndexBuffer
Ecco, alla fine ci sono riuscito.
ib = New IndexBuffer(GetType(Integer), 3, dispositivo, 0, Pool.Default) Dim indici As Integer() = New Integer(3) {} indici(0) = 0 indici(1) = 1 indici(2) = 2 ib.SetData(indici, 0, LockFlags.None)
Adesso il mio programma non fa assolutamente niente, ma almeno non dà messaggi di errore.
E' già qualcosa...
Nessun commento:
Posta un commento