Paket | flash.display3D |
Klass | public class VertexBuffer3D |
Arv | VertexBuffer3D Object |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11, AIR 3 |
Använd ett VertexBuffer3D-objekt för att definiera data associerade med varje punkt i en vertex-uppsättning. Du kan skicka vertex-data antingen från en Vector-array eller en ByteArray. (När de skickats refereras inte längre data i den ursprungliga arrayen. Vertex-data ändras inte om du ändrar eller tar bort käll-arrayen.)
Data associerade med varje vertex finns i ett programdefinierat format och används som indata för vertex-skuggningsprogrammet. Identifiera vilka värden som tillhör vilka vertex-programindata med hjälp av Context3D-objektets setVertexBufferAt()
-funktion. I ett vertex-program kan upp till åtta indatavärden användas (kallas även vertex-attributregister). Varje indatavärde kan kräva mellan ett och fyra 32-bitars värden. Exempelvis kan positionskoordinaterna [x,y,z] för en hörnpunkt skickas till ett vertex-program som en vektor med tre 32-bitars värden. Klassen Context3DVertexBufferFormat definierar konstanter för de format som stöds för skuggningsindata. Du kan ange upp till sextiofyra 32-bitars värden (256 byte) med data för varje punkt (men en vertex-skuggning kan inte använda alla data i detta fall).
Funktionen setVertexBufferAt()
identifierar även vilken vertex-buffert som ska användas för återgivning av efterföljande drawTriangles()
-anrop. Om du vill återge data från en annan vertex-buffert, anropar du setVertexBufferAt()
en gång till med lämpliga argument. (Du kan lagra data för samma punkt i flera vertex-buffertar, exempelvis positionsdata i en buffert och texturkoordinater i en annan, men återgivning är vanligtvis mer effektivt om alla data för en punkt kommer från en och samma buffert.)
Objektet Index3DBuffer som skickas till Context3D-objektetsdrawTriangles()
-metod organiserar vertex-data till trianglar. Varje värde i index-bufferten är indexet för en hörnpunkt i vertex-bufferten. En uppsättning med tre index, i sekvens, definierar en triangel.
Du kan inte skapa ett VertexBuffer3D-objekt direkt. Använd i stället Context3D-objektets createVertexBuffer()
-metod.
Om du vill frigöra resurser som är associerade med en vertex-buffert för återgivningssammanhanget, ska du anropa objektetsdispose()
-metod.
Relaterade API-element
Metod | Definieras med | ||
---|---|---|---|
Frigör alla resurser associerade med detta objekt. | VertexBuffer3D | ||
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
Returnerar det angivna objektets strängbeteckning. | Object | ||
Överför data för en punktuppsättning till återgivningssammanhanget från en byte-array. | VertexBuffer3D | ||
Överför data för en punktuppsättning till återgivningssammanhanget från en vektor-array. | VertexBuffer3D | ||
Returnerar det angivna objektets primitiva värde. | Object |
dispose | () | metod |
public function dispose():void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11, AIR 3 |
Frigör alla resurser associerade med detta objekt. Sedan en vertex-buffert rensats, kommer anrop av upload() och återgivning med detta objekt att misslyckas.
uploadFromByteArray | () | metod |
public function uploadFromByteArray(data:ByteArray, byteArrayOffset:int, startVertex:int, numVertices:int):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11, AIR 3 |
Överför data för en punktuppsättning till återgivningssammanhanget från en byte-array.
Parametrar
data:ByteArray — en byte-array som innehåller vertex-data. Varje värde är fyra byte långt. Antalet värden i en vertex anges när bufferten skapas med hjälp av data32PerVertex -parametern till Context3D-objektets createVertexBuffer3D -metod. Datalängden i byte måste vara byteArrayOffset plus fyra gånger antalet värden per vertex gånger antalet vertex. För objektet ByteArray måste formatet little endian användas.
| |
byteArrayOffset:int — antalet byte som ska hoppas över från databörjan
| |
startVertex:int — Indexet för det första vertexet som ska läsas in. Ett värde för startVertex som inte är lika med noll kan användas för att läsa in en underregion av vertex-data.
| |
numVertices:int — Antalet vertex som ska läsas in från data .
|
Utlöser
TypeError — Null-pekarfel: När data är null.
| |
RangeError — Felaktig indatastorlek: om byteArrayOffset är mindre än 0, eller om byteArrayOffset är större än eller lika med längden på data , eller om antalet element i data - byteArrayOffset är mindre än numVertices *data32pervertex *4 som anges i Context3D::createVertexBuffer() .
| |
Error — 3768: Programmeringsgränssnittet för Stage3D kan inte användas under bakgrundskörning.
|
uploadFromVector | () | metod |
public function uploadFromVector(data:Vector.<Number>, startVertex:int, numVertices:int):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11, AIR 3 |
Överför data för en punktuppsättning till återgivningssammanhanget från en vektor-array.
Parametrar
data:Vector.<Number> — en vektor med 32-bitars värden. En enskild vertex består av ett antal värden lagrade efter varandra i vektorn. Antalet värden i en vertex anges när bufferten skapas med hjälp av data32PerVertex -parametern till Context3D-objektets createVertexBuffer3D -metod. Längden på vektorn måste vara antalet värden per vertex gånger antalet vertex.
| |
startVertex:int — Indexet för det första vertexet som ska läsas in. Ett värde för startVertex som inte är lika med noll kan användas för att läsa in en underregion av vertex-data.
| |
numVertices:int — Antalet vertex som representeras av data .
|
Utlöser
TypeError — Null-pekarfel: När data är null.
| |
RangeError — Felaktig indatastorlek: när antalet element i data är mindre än numVertices * data32PerVertex som anges i Context3D::createVertexBuffer() , eller när startVertex + numVertices är större än numVertices som anges i Context3D::createVertexBuffer() .
|
setVertexBufferAt()
i exemplet för att ange att de första tre datapunkterna skickas till vertex-programmet som tre flyttalsvärden i va0 och att de andra tre datapunkterna skickas som va1. Ett vertex-program kan ha upp till 8 indatavärden, som även kallas vertex-attributregister, som definieras på det här sättet.
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, 01:40 PM Z