Pacchetto | flash.display3D |
Classe | public class VertexBuffer3D |
Ereditarietà | VertexBuffer3D Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Utilizzate un oggetto VertexBuffer3D per definire i dati associati a ogni punto in una serie di vertici. È possibile caricare i dati dei vertici da un array Vector o da un ByteArray. (Dopo il caricamento, non esiste più alcun riferimento ai dati dell'array originale; la modifica o la rimozione dell'array di origine non ha effetto sui dati dei vertici.)
I dati associati a ciascun vertice sono in un formato definito dall'applicazione e fungono da input per il programma shader di vertici. Per determinare quali valori appartengono a quale input del programma di vertici, utilizzate la funzione Context3D setVertexBufferAt()
. Un programma di vertici può utilizzare fino a otto input (denominati anche registri attributi di vertici). Ogni input può richiedere da uno a quattro valori a 32 bit. Ad esempio, le coordinate di posizione [x,y,z] di un vertice possono essere passate a un programma di vertici in un vettore contenente tre valori a 32 bit. La classe Context3DVertexBufferFormat definisce le costanti per i formati supportati per gli input degli shader. Potete specificare fino a 64 valori a 32 bit (256 byte) di dati per ciascun punto (ma un singolo shader di vertici non può usare tutti i dati in questo caso).
La funzione setVertexBufferAt()
inoltre identifica il buffer di vertici da utilizzare per il rendering delle chiamate drawTriangles()
successive. Per eseguire il rendering dei dati da un buffer di vertici differente, chiamate setVertexBufferAt()
di nuovo con gli argomenti appropriati. (Potete memorizzare i dati per lo stesso punto in più buffer di vertici, ad esempio i dati di posizione in un buffer e le coordinate delle texture in un altro, ma solitamente il processo è più efficiente se tutti i dati di un punto provengono da un unico buffer.)
L'oggetto Index3DBuffer passato al metodo Context3D drawTriangles()
organizza i dati dei vertici in triangoli. Ogni valore nel buffer di indici è l'indice di un vertice nel buffer di vertici. Una serie di tre indici, in sequenza, definisce un triangolo.
Non è possibile creare un oggetto VertexBuffer3D direttamente. Utilizzate invece il metodo Context3D createVertexBuffer()
.
Per liberare le risorse del contesto di rendering associate a un buffer di vertici, chiamate il metodo dispose()
dell'oggetto.
Elementi API correlati
Metodo | Definito da | ||
---|---|---|---|
Libera tutte le GPU associate a questo oggetto. | VertexBuffer3D | ||
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
Restituisce la rappresentazione in formato stringa dell'oggetto specificato. | Object | ||
Carica i dati di una serie di punti nel contesto di rendering da un array di byte. | VertexBuffer3D | ||
Carica i dati di una serie di punti nel contesto di rendering da un array di vettori. | VertexBuffer3D | ||
Restituisce il valore di base dell'oggetto specificato. | Object |
dispose | () | metodo |
public function dispose():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Libera tutte le GPU associate a questo oggetto. Dopo la rimozione di un buffer di vertici, eventuali chiamate di upload() e il rendering eseguito con questo oggetto hanno esito negativo.
uploadFromByteArray | () | metodo |
public function uploadFromByteArray(data:ByteArray, byteArrayOffset:int, startVertex:int, numVertices:int):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Carica i dati di una serie di punti nel contesto di rendering da un array di byte.
Parametri
data:ByteArray — Un array di byte contenente i dati dei vertici. Ogni valore di dati ha una lunghezza di quattro byte. Il numero di valori in un vertice viene specificato durante la creazione del buffer utilizzando il parametro data32PerVertex del metodo Context3D createVertexBuffer3D() . La lunghezza dei dati in byte deve essere byteArrayOffset più quattro volte il numero di valori per vertice moltiplicato per il numero di vertici. L'oggetto ByteArray deve utilizzare il formato little endian.
| |
byteArrayOffset:int — Il numero di byte da ignorare dall'inizio dei dati.
| |
startVertex:int — L'indice del primo vertice da caricare. Un valore per startVertex non uguale a zero può essere utilizzato per caricare una sotto-sezione dei dati dei vertici.
| |
numVertices:int — Il numero di vertici da caricare da data .
|
Genera
TypeError — Puntatore nullo: quando matrix è null.
| |
RangeError — Dimensione di input errata: se byteArrayOffset è inferiore a 0 o se byteArrayOffset è superiore o uguale alla lunghezza di data o no. di elementi in data - byteArrayOffset è inferiore a numVertices *data32pervertex *4 dato in Context3D::createVertexBuffer() .
| |
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.
|
uploadFromVector | () | metodo |
public function uploadFromVector(data:Vector.<Number>, startVertex:int, numVertices:int):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Carica i dati di una serie di punti nel contesto di rendering da un array di vettori.
Parametri
data:Vector.<Number> — Un vettore di valori di a 32 bit. Un singolo vertice è composto da una serie di valori memorizzati sequenzialmente nel vettore. Il numero di valori in un vertice viene specificato durante la creazione del buffer utilizzando il parametro data32PerVertex del metodo Context3D createVertexBuffer3D() . La lunghezza del vettore deve essere il numero di valori per vertice moltiplicato per il numero di vertici.
| |
startVertex:int — L'indice del primo vertice da caricare. Un valore per startVertex non uguale a zero può essere utilizzato per caricare una sotto-sezione dei dati dei vertici.
| |
numVertices:int — Il numero di vertici rappresentati da data .
|
Genera
TypeError — Puntatore nullo: quando matrix è null.
| |
RangeError — Dimensione di input errata: quando il numero di elementi in data è inferiore a numVertices * data32PerVertex dato in Context3D::createVertexBuffer() o quando startVertex + numVertices è maggiore di numVertices dato in Context3D::createVertexBuffer() .
|
setVertexBufferAt()
per specificare che i primi tre punti dati vengano passati al programma di vertici come tre valori a virgola mobile in va0 e che i secondi tre punti dati vengano passati come va1. Un programma di vertici può avere fino a otto input (denominati anche registri attributi di vertici) definiti in questo modo.
const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); var vertexes:VertexBuffer3D = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va0 as the position data renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va1 as the color data
Tue Jun 12 2018, 02:44 PM Z