JavascriptProva

sabato 16 novembre 2013

Annotazioni informali sulla creazione di VertexBuffer e IndexBuffer.

Bene. Dunque la creazione di un buffer sarebbe motivata dal dover archiviare una grande quantità di vertici.
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.ToArgb
Dunque, 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