Pakiet | flash.display3D |
Klasa | public class VertexBuffer3D |
Dziedziczenie | VertexBuffer3D Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Obiekt VertexBuffer3D pozwala zdefiniować dane skojarzone z każdym punktem w zestawie wierzchołków. Dane wierzchołków można wysłać z tablicy obiektów Vector lub obiektu ByteArray. (Po wysłaniu kod nie odnosi się już do danych w oryginalnej tablicy. Zmiany lub usunięcie tablicy źródłowej nie mają wpływu na dane wierzchołków).
Dane skojarzone z poszczególnymi wierzchołkami są przechowywane w formacie zdefiniowanym przez aplikację i są stosowane jako parametry wejściowe programu modułu cieniującego wierzchołków. Metoda setVertexBufferAt()
klasy Context3D pozwala określić, które wartości należą do których danych wejściowych programu wierzchołków. Program wierzchołków może korzystać z maksymalnie ośmiu wejść (określanych też jako rejestry atrybutów wierzchołków). Każde wejście może wymagać od jednej do czterech wartości 32-bitowych. Współrzędne położenia wierzchołka [x,y,z] mogą na przykład zostać przekazane do programu wierzchołków w formie wektora zawierającego trzy wartości 32-bitowe. Klasa Context3DVertexBufferFormat definiuje stałe dla obsługiwanych formatów danych wejściowych modułów cieniujących. Można podać maksymalnie 64 wartości 32-bitowe (256 bajtów) danych dla każdego punktu. W takiej sytuacji pojedynczy moduł cieniujący wierzchołków nie może użyć wszystkich danych.
Funkcja setVertexBufferAt()
identyfikuje również bufor wierzchołków, który ma być używany przy renderowaniu wszystkich kolejnych wywołań metody drawTriangles()
. Aby renderować dane z innego bufora wierzchołków, należy jeszcze raz wywołać metodę setVertexBufferAt()
z odpowiednimi argumentami. (Dane dotyczące tego samego punktu można przechowywać w wielu buforach wierzchołków, umieszczając na przykład dane położenia w jednym buforze i współrzędne tekstury w innym. Zazwyczaj renderowanie jest jednak wydajniejsze, jeśli wszystkie dane punktu pochodzą z pojedynczego bufora).
Obiekt Index3DBuffer przekazany do metody drawTriangles()
obiektu Context3D porządkuje dane wierzchołków w trójkąty. Każda wartość w buforze indeksów stanowi indeks wierzchołka w buforze wierzchołków. Zestaw trzech kolejnych indeksów definiuje trójkąt.
Nie można bezpośrednio utworzyć obiektu VertexBuffer3D. Zamiast tego należy użyć metody createVertexBuffer()
Context3D.
Aby zwolnić zasoby kontekstu renderowania skojarzone z buforem wierzchołków, należy wywołać metodę dispose()
.
Powiązane elementy interfejsu API
Metoda | Zdefiniowane przez | ||
---|---|---|---|
Zwalnia wszystkie zasoby skojarzone z tym obiektem. | VertexBuffer3D | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg reprezentujący określony obiekt. | Object | ||
Wysyła dane zestawu punktów z tablicy bajtów do kontekstu renderowania. | VertexBuffer3D | ||
Wysyła dane zestawu punktów z tablicy wektorów do kontekstu renderowania. | VertexBuffer3D | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object |
dispose | () | metoda |
public function dispose():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Zwalnia wszystkie zasoby skojarzone z tym obiektem. Po zwolnieniu bufora wierzchołków wywołanie metody upload() i renderowanie przy użyciu tego obiektu nie powiedzie się.
uploadFromByteArray | () | metoda |
public function uploadFromByteArray(data:ByteArray, byteArrayOffset:int, startVertex:int, numVertices:int):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Wysyła dane zestawu punktów z tablicy bajtów do kontekstu renderowania.
Parametry
data:ByteArray — Tablica bajtów zawierająca dane wierzchołków. Każda wartość ma cztery bajty. Liczba wartości w wierzchołku jest określana w momencie tworzenia bufora za pomocą parametru data32PerVertex wywołania metody createVertexBuffer3D() klasy Context3D. Ilość danych w bajtach musi wynosić: byteArrayOffset + 4 x liczba wartości na wierzchołek x liczba wierzchołków. Obiekt ByteArray musi korzystać z formatu little endian.
| |
byteArrayOffset:int — Liczba bajtów do pominięcia, licząc od początku danych.
| |
startVertex:int — Indeks pierwszego wierzchołka do wczytania. W celu wczytania regionu podrzędnego danych wierzchołka można użyć wartości startVertex innej niż zero.
| |
numVertices:int — Liczba wierzchołków do wczytania z parametru data .
|
Zgłasza
TypeError — Błąd pustego wskaźnika: gdy właściwość data ma wartość null.
| |
RangeError — Nieprawidłowy rozmiar danych wejściowych: Jeśli wartość byteArrayOffset jest mniejsza niż 0, wartość byteArrayOffset jest nie mniejsza niż długość tablicy data lub liczba elementów w tablicy data – byteArrayOffset to mniej niż numVertices * data32pervertex * 4 z metody Context3D::createVertexBuffer() .
| |
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.
|
uploadFromVector | () | metoda |
public function uploadFromVector(data:Vector.<Number>, startVertex:int, numVertices:int):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Wysyła dane zestawu punktów z tablicy wektorów do kontekstu renderowania.
Parametry
data:Vector.<Number> — Wektor wartości 32-bitowych. Pojedynczy wierzchołek składa się z pewnej liczby wartości przechowywanych sekwencyjnie w wektorze. Liczba wartości w wierzchołku jest określana w momencie tworzenia bufora za pomocą parametru data32PerVertex wywołania metody createVertexBuffer3D() klasy Context3D. Długość wektora musi wynosić: liczba wartości na wierzchołek x liczba wierzchołków.
| |
startVertex:int — Indeks pierwszego wierzchołka do wczytania. W celu wczytania regionu podrzędnego danych wierzchołka można użyć wartości startVertex innej niż zero.
| |
numVertices:int — Liczba wierzchołków reprezentowanych przez parametr data .
|
Zgłasza
TypeError — Błąd pustego wskaźnika: gdy właściwość data ma wartość null.
| |
RangeError — Nieprawidłowy rozmiar danych wejściowych: Gdy liczba elementów w tablicy data to mniej niż numVertices * data32PerVertex z metody Context3D::createVertexBuffer() lub startVertex + numVertices to więcej niż wartość numVertices z metody Context3D::createVertexBuffer() .
|
setVertexBufferAt()
w celu wskazania, że pierwsze trzy punkty danych są przekazywane do programu wierzchołków jako 3 wartości zmiennoprzecinkowe w tablicy va0, a kolejne trzy punkty danych są przekazywane w tablicy va1. Dla programu wierzchołków można w ten sposób zdefiniować maksymalnie 8 parametrów wejściowych (tak zwanych rejestrów atrybutów wierzchołków).
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, 12:06 PM Z