Paket | flash.display3D |
Klasse | public class VertexBuffer3D |
Vererbung | VertexBuffer3D Object |
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Verwenden Sie ein VertexBuffer3D-Objekt, um die Daten zu definieren, die jedem Punkt in einem Satz von Vertizes zugeordnet sind. Sie können die Vertexdaten entweder von einem Vektorarray oder einem Bytearray hochladen. (Nach dem Hochladen wird nicht länger auf die Daten im Originalarray verwiesen; das Ändern oder Verwerfen des Ausgangsarrays ändert die Vertexdaten nicht.)
Die Daten, die jedem Vertex zugeordnet sind, liegen in einem von der Anwendung definierten Format vor und werden als Eingabe für das Vertexshaderprogramm verwendet. Bestimmen Sie mithilfe der Context3D-Funktion setVertexBufferAt()
, welche Werte zu welcher Vertexprogrammeingabe gehören. Ein Vertexprogramm kann bis zu acht Eingabe (auch als Vertexattributregister bezeichnet) verwenden. Jede Eingabe kann ein bis vier 32-Bit-Werte erfordern. Die [x,y,z]-Positionskoordinaten eines Vertex können zum Beispiel als ein Vektor mit drei 32-Bit-Werten an ein Vertexprogramm übergeben werden. Die Context3DVertexBufferFormat-Klasse definiert Konstanten für die unterstützten Formate der Shadereingaben. Sie können bis zu 64 32-Bit-Werte (256 Bytes) für jeden Punkt bereitstellen (allerdings kann ein einzelner Vertexshader in diesem Fall nicht alle Daten verwenden).
Die setVertexBufferAt()
-Funktion identifiziert auch, welcher Vertexpuffer zum Rendern aller nachfolgenden Aufrufe von drawTriangles()
verwendet wird. Um Daten aus einem anderen Vertexpuffer zu rendern, rufen Sie setVertexBufferAt()
mit den entsprechenden Argumenten erneut auf. (Sie können Daten für denselben Punkt in mehreren Vertexpuffern speichern, zum Beispiel Positionsdaten in einem und Texturkoordinaten in einem anderen; normalerweise ist das Rendern aber effizienter, wenn alle Daten für einen Punkt aus einem einzelnen Puffer stammen.)
Das Index3DBuffer-Objekt, das an die Context3D-Methode drawTriangles()
übergeben wird, organisiert die Vertexdaten zu Dreiecken. Jeder Wert im Indexpuffer ist der Index für einen Vertex im Vertexpuffer. Eine Gruppe von drei Indizes in Folge definiert ein Dreieck.
Sie können ein VertexBuffer3D-Objekt nicht direkt erstellen. Verwenden Sie stattdessen die Context3D-Methode createVertexBuffer()
.
Um die Renderkontextressourcen freizugeben, die mit einem Vertexpuffer verknüpft sind, rufen Sie die dispose()
-Methode des Objekts auf.
Verwandte API-Elemente
Methode | Definiert von | ||
---|---|---|---|
Gibt alle Ressourcen frei, die diesem Objekt zugeordnet sind. | VertexBuffer3D | ||
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. | Object | ||
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. | Object | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. | Object | ||
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas. | Object | ||
Gibt das angegebene Objekt als String zurück. | Object | ||
Lädt die Daten für einen Satz von Punkten aus einem Bytearray in den Renderkontext. | VertexBuffer3D | ||
Lädt die Daten für einen Satz von Punkten aus einem Vektorarray in den Renderkontext. | VertexBuffer3D | ||
Gibt den Grundwert des angegebenen Objekts zurück. | Object |
dispose | () | Methode |
public function dispose():void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Gibt alle Ressourcen frei, die diesem Objekt zugeordnet sind. Nachdem ein Vertexpuffer verworfen wurde, schlägt das Aufrufen von upload() und das Rendern für dieses Objekt fehl.
uploadFromByteArray | () | Methode |
public function uploadFromByteArray(data:ByteArray, byteArrayOffset:int, startVertex:int, numVertices:int):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Lädt die Daten für einen Satz von Punkten aus einem Bytearray in den Renderkontext.
Parameter
data:ByteArray — ein Bytearray, das die Vertexdaten enthält. Jeder Datenwert ist vier Bytes lang. Die Anzahl der Werte in einem Vertex wird bei der Puffererstellung mit dem data32PerVertex -Parameter für die Context3D-Methode createVertexBuffer3D() angegeben. Die Länge der Daten in Bytes muss byteArrayOffset plus vier mal die Anzahl der Werte pro Vertex mal der Anzahl der Vertizes betragen. Das ByteArray-Objekt muss das Little-Endian-Format verwenden.
| |
byteArrayOffset:int — Anzahl der Bytes, die ab dem Datenanfang übersprungen werden sollen
| |
startVertex:int — Der Index des ersten zu ladenden Scheitelpunkts. Ein startVertex-Wert, der nicht null ist, kann zum Laden eines Teilbereichs der Vertexdaten verwendet werden.
| |
numVertices:int — Die Anzahl der Scheitelpunkte, die aus data geladen werden.
|
Auslöser
TypeError — Nullzeigerfehler: wenn data den Wert null hat.
| |
RangeError — Fehlerhafte Eingabegröße: Wenn byteArrayOffset kleiner als 0 ist, oder wenn byteArrayOffset größer oder gleich der Länge von data ist. von Elementen in data - byteArrayOffset kleiner als numVertices * data32pervertex *4, festgelegt in Context3D::createVertexBuffer () .
| |
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.
|
uploadFromVector | () | Methode |
public function uploadFromVector(data:Vector.<Number>, startVertex:int, numVertices:int):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Lädt die Daten für einen Satz von Punkten aus einem Vektorarray in den Renderkontext.
Parameter
data:Vector.<Number> — ein Vektor von 32-Bit-Werten. Ein einzelner Vertex besteht aus einer Anzahl von Werten, die nacheinander im Vektor gespeichert werden. Die Anzahl der Werte in einem Vertex wird bei der Puffererstellung mit dem data32PerVertex -Parameter für die Context3D-Methode createVertexBuffer3D() angegeben. Die Länge des Vektors muss der Anzahl der Werte pro Vertex mal Anzahl der Vertizes betragen.
| |
startVertex:int — Der Index des ersten zu ladenden Scheitelpunkts. Ein startVertex -Wert, der nicht null ist, kann zum Laden eines Teilbereichs der Vertexdaten verwendet werden.
| |
numVertices:int — Die Anzahl der Vertizes, die von data repräsentiert werden.
|
Auslöser
TypeError — Nullzeigerfehler: wenn data den Wert null hat.
| |
RangeError — Fehlerhafte Eingabegröße: Wenn die Anzahl der Elemente in data kleiner als numVertices * data32PerVertex , die in Context3D::createVertexBuffer () festgelegt wurden, ist, oder wenn startVertex + numVertices größer als die numVertices , die in Context3D::createVertexBuffer() festgelegt wurden, ist.
|
setVertexBufferAt()
-Methode auf, um festzulegen, dass die ersten drei Datenpunkte als 3 Gleitkommawerte in va0 und die zweiten drei Datenpunkte als va1 übergeben werden. Für ein Vertexprogramm können auf diese Weise bis zu 8 Eingaben, auch als Vertexattributregister bezeichnet, definiert werden.
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, 10:04 AM Z