Pakiet | flash.display3D |
Klasa | public final class Context3D |
Dziedziczenie | Context3D EventDispatcher Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Kontekst renderowania obejmuje powierzchnię rysowania oraz powiązane z nią zasoby i stan. Jeśli to możliwe, kontekst renderowania korzysta ze sprzętowego procesora graficznego (GPU, graphic processing unit). W pozostałych przypadkach kontekst renderowania korzysta z renderowania programowego. (Jeśli platforma nie obsługuje renderowania za pośrednictwem klasy Context3D, właściwość stage3Ds
obiektu Stage zawiera pustą listę).
Kontekst renderowania Context3D to programowalny proces bardzo podobny do biblioteki OpenGL ES 2, oferujący jednak środowisko abstrakcyjne zgodne z wieloma interfejsami sprzętowymi i GPU. Proces renderowania opracowano z myślą o grafice 3D, ale jego zastosowania nie są ograniczone do danych 3D. Można tworzyć moduły renderujące 2D, podając odpowiednie programy fragmentów dla wierzchołków i pikseli. Zarówno w przypadku renderowania 3D, jak i 2D jedynym obsługiwanym podstawowym kształtem geometrycznym jest trójkąt.
Wystąpienie klasy Context3D można utworzyć za pomocą wywołania metody requestContext3D()
obiektu Stage3D. Liczba dozwolonych obiektów Context3D na stole montażowym jest ograniczona do jednego obiektu na każdy obiekt Stage3D z listy Stage.stage3Ds
. W momencie utworzenia kontekstu obiekt Stage3D wywołuje zdarzenie context3DCreate
. Kontekst renderowania może zostać w dowolnym momencie zniszczony i utworzony ponownie, na przykład w sytuacji uaktywnienia innej aplikacji korzystającej z GPU. Kod powinien uwzględniać możliwość odebrania wielu zdarzeń context3DCreate
. Obszar renderowania można ustawić na stole montażowym przy użyciu właściwości x
i y
skojarzonego wystąpienia klasy Stage3D.
Renderowanie i wyświetlanie sceny (po utworzeniu obiektu Context3D) wymaga zwykle wykonania następujących czynności:
- Skonfigurowanie atrybutów głównego bufora wyświetlacza za pomocą wywołania metody
configureBackBuffer()
- Utworzenie i zainicjowanie zasobów renderowania, takich jak:
- Bufory wierzchołków i indeksów definiujące geometrię sceny
- Programy wierzchołków i pikseli (moduły cieniujące) do renderowania sceny
- Tekstury
- Przeprowadzenie renderowania klatki:
- Ustawienie stanu renderowania odpowiedniego dla obiektu lub kolekcji obiektów znajdujących się na scenie
- Wywołanie metody
drawTriangles()
w celu przeprowadzenia renderowania zestawu trójkątów - Zmiana stanu renderowania dla następnej grupy obiektów
- Wywołanie metody
drawTriangles()
w celu narysowania trójkątów definiujących obiekty - Powtarzanie tych czynności do momentu zakończenia renderowania całej sceny
- Wywołanie metody
present()
w celu wyświetlenia wyrenderowanej sceny na stole montażowym
Renderowanie podlega następującym ograniczeniom:
Limity dotyczące zasobów:
Zasób | Dozwolona liczba | Całkowita ilość pamięci |
---|---|---|
Bufory wierzchołków
| 4096 | 256 MB |
Bufory indeksów
| 4096 | 128 MB |
Programy
| 4096 | 16 MB |
Tekstury
| 4096 | 128 MB |
Tekstury sześcienne
| 4096 | 256 MB |
Limity dotyczące kodu AGAL: 200 kodów operacji na program
Limity dotyczące wywołań rysowania: 32 768 wywołań metody drawTriangles()
na każde wywołanie metody present()
Tekstury podlegają następującym ograniczeniom:
Limity tekstur dla 32-bitowego środowiska AIR:
Texture | Maksymalny rozmiar | Całkowita ilość pamięci procesora graficznego |
---|---|---|
Tekstura normalna (podstawowa rozszerzona lub niższa)
| 2048 × 2048 | 512 MB |
Tekstura normalna (podstawowa rozszerzona lub wyższa)
| 4096×4096 | 512 MB |
Tekstura prostokątna (podstawowa rozszerzona lub niższa)
| 2048 × 2048 | 512 MB |
Tekstura prostokątna (podstawowa rozszerzona lub wyższa)
| 4096×4096 | 512 MB |
Tekstura sześcienna
| 1024x1024 | 256 MB |
Limity tekstur dla 64-bitowego środowiska AIR (komputer):
Texture | Maksymalny rozmiar | Całkowita ilość pamięci procesora graficznego |
---|---|---|
Tekstura normalna (podstawowa rozszerzona lub niższa)
| 2048 × 2048 | 512 MB |
Tekstura normalna (podstawowa rozszerzona do standardowej)
| 4096×4096 | 512 MB |
Tekstura normalna (standardowa rozszerzona lub wyższa)
| 4096×4096 | 2048 MB |
Tekstura prostokątna (podstawowa rozszerzona lub niższa)
| 2048 × 2048 | 512 MB |
Tekstura prostokątna (podstawowa rozszerzona do standardowej)
| 4096×4096 | 512 MB |
Tekstura prostokątna (standardowa rozszerzona lub wyższa)
| 4096×4096 | 2048 MB |
Tekstura sześcienna
| 1024x1024 | 256 MB |
512 MB to całkowity limit dotyczący tekstur. Obejmuje to również pamięć tekstur wymaganą na mipmapy. Jednak w przypadku tekstur sześciennych obowiązuje limit pamięci 256 MB.
Nie można tworzyć obiektów Context3D przy użyciu konstruktora Context3D. Obiekty te są tworzone i dostępne jako właściwości wystąpienia klasy Stage3D. Klasa Context3D może być używana na platformach komputerowych i mobilnych — zarówno podczas pracy w programie Flash Player, jak i w środowisku AIR.
Powiązane elementy interfejsu API
Context3DClearMask
Context3DCompareMode
Context3DProgramType
Context3DRenderMode
Context3DStencilAction
Context3DTextureFormat
Context3DTriangleFace
Context3DVertexBufferFormat
flash.display3D.textures.Texture
flash.display3D.textures.CubeTexture
IndexBuffer3D
flash.geom.Matrix3D
Program3D
flash.display.Stage3D
VertexBuffer3D
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
backBufferHeight : int [tylko do odczytu]
Określa wysokość bufora tylnego, którą można zmienić przez pomyślne wywołanie metody configureBackBuffer(). | Context3D | ||
backBufferWidth : int [tylko do odczytu]
Określa szerokość bufora tylnego, którą można zmienić przez pomyślne wywołanie metody configureBackBuffer(). | Context3D | ||
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
driverInfo : String [tylko do odczytu]
Typ sterownika biblioteki graficznej używanego w tym kontekście renderowania. | Context3D | ||
enableErrorChecking : Boolean
Określa, czy błędy napotkane przez mechanizm renderujący mają być zgłaszane aplikacji. | Context3D | ||
maxBackBufferHeight : int
Określa maksymalną wysokość bufora tylnego. | Context3D | ||
maxBackBufferWidth : int
Określa maksymalną szerokość bufora tylnego. | Context3D | ||
profile : String [tylko do odczytu]
Profil obsługiwanych funkcji jest używany przez ten obiekt Context3D. | Context3D | ||
supportsVideoTexture : Boolean [statyczny] [tylko do odczytu]
Wskazuje, czy obiekt Context3D obsługuje teksturę wideo. | Context3D | ||
totalGPUMemory : Number [tylko do odczytu]
Zwraca całkowitą pamięć GPU przydzieloną przez struktury danych obiektów Stage3D aplikacji. Po każdym utworzeniu obiektu zasobu GPU wykorzystana pamięć zostaje zapisana w klasie Context3D. | Context3D |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Rejestruje obiekt detektora zdarzeń w obiekcie EventDispatcher, dzięki czemu detektor będzie otrzymywał powiadomienia o zdarzeniu. | EventDispatcher | ||
clear(red:Number = 0.0, green:Number = 0.0, blue:Number = 0.0, alpha:Number = 1.0, depth:Number = 1.0, stencil:uint = 0, mask:uint = 0xffffffff):void
Służy do oczyszczania buforów kolorów, głębi i szablonów powiązanych z danym obiektem Context3D i wypełniania ich określonymi wartościami. | Context3D | ||
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Ustawia wymiary widoku i innych atrybutów bufora renderowania. | Context3D | ||
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Tworzy obiekt CubeTexture. | Context3D | ||
Tworzy obiekt IndexBuffer3D. | Context3D | ||
Tworzy obiekt Program3D. | Context3D | ||
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Tworzy obiekt RectangleTexture. | Context3D | ||
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Tworzy obiekt Texture. | Context3D | ||
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Tworzy obiekt VertexBuffer3D. | Context3D | ||
createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Tworzy obiekt VertexBuffer3D na dane wystąpień. | Context3D | ||
Tworzy nowy obiekt VideoTexture. | Context3D | ||
Wywołuje zdarzenie, tj. kieruje je do przepływu zdarzeń. | EventDispatcher | ||
Zwalnia wszystkie zasoby i cały magazyn wewnętrzny związane z danym obiektem Context3D. | Context3D | ||
Rysuje w bitmapie bieżący bufor mechanizmu renderującego. | Context3D | ||
Metoda umożliwia renderowanie określonych trójkątów z użyciem bieżących buforów i stanu obiektu Context3D. | Context3D | ||
drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Metoda umożliwia renderowanie wystąpień trójkątów z użyciem bieżących buforów i stanu obiektu Context3D. | Context3D | ||
Sprawdza, czy obiekt EventDispatcher zawiera jakiekolwiek detektory zarejestrowane dla konkretnego typu zdarzeń. | EventDispatcher | ||
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 | ||
Wyświetla tylny bufor renderowania. | Context3D | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Usuwa detektor z obiektu EventDispatcher. | EventDispatcher | ||
Określa współczynniki użyte do mieszania koloru wyjściowego operacji rysowania z istniejącym kolorem. | Context3D | ||
Ustawia maskę używaną podczas zapisywania kolorów w buforze renderowania. | Context3D | ||
Ustawia tryb wyłączania trójkątów. | Context3D | ||
Ustawia typ porównywania używanego do testowania głębi. | Context3D | ||
Pozwala ustawić tryb wypełniania przy renderowaniu. | Context3D | ||
Konfiguruje programy modułów cieniujących wierzchołków i fragmentów do użytku w dalszym renderowaniu. | Context3D | ||
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Ustawia stałe do użytku w programach modułów cieniujących, korzystając z wartości przechowywanych w obiekcie ByteArray. | Context3D | ||
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Ustawia stałe do użytku w programach modułów cieniujących, korzystając z wartości przechowywanych w obiekcie Matrix3D. | Context3D | ||
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Ustawia stałe parametry wejściowe dla programów modułów cieniujących. | Context3D | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Ustawia tylny bufor renderowania jako cel renderowania. | Context3D | ||
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Ustawia określoną teksturę jako cel renderowania. | Context3D | ||
Pozwala ręcznie przesłonić stan próbnika tekstury. | Context3D | ||
Ustawia prostokąt nożyczek. Jest to typ maski rysowania. | Context3D | ||
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Ustawia tryb i operację szablonu. | Context3D | ||
Ustawia wartość porównawczą szablonu stosowaną w testach szablonów. | Context3D | ||
Określa teksturę, która ma być stosowana w rejestrze tekstur wejściowych programu fragmentów. | Context3D | ||
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Określa, które składniki danych wierzchołków odpowiadają pojedynczym danym wejściowym programu modułu cieniującego wierzchołków. | Context3D | ||
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 | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object | ||
Sprawdza, czy detektor zdarzeń określonego typu jest zarejestrowany w tym obiekcie EventDispatcher lub jego elementach macierzystych. | EventDispatcher |
backBufferHeight | właściwość |
backBufferHeight:int
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 15, AIR 15 |
Określa wysokość bufora tylnego, którą można zmienić przez pomyślne wywołanie metody configureBackBuffer()
. Wysokość można zmienić, gdy zmieni się współczynnik powiększenia przeglądarki, a parametr wantsBestResolutionOnBrowserZoom
zostanie ustawiony na true
w ostatnim pomyślnym wywołaniu metody configureBackBuffer()
. Zmianę wysokości można wykryć, rejestrując detektor zdarzeń zmiany powiększenia przeglądarki.
Implementacja
public function get backBufferHeight():int
Powiązane elementy interfejsu API
backBufferWidth | właściwość |
backBufferWidth:int
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 15, AIR 15 |
Określa szerokość bufora tylnego, którą można zmienić przez pomyślne wywołanie metody configureBackBuffer()
. Szerokość można zmienić, gdy zmieni się współczynnik powiększenia przeglądarki, a parametr wantsBestResolutionOnBrowserZoom
zostanie ustawiony na true
w ostatnim pomyślnym wywołaniu metody configureBackBuffer()
. Zmianę szerokości można wykryć, rejestrując detektor zdarzeń zmiany powiększenia przeglądarki.
Implementacja
public function get backBufferWidth():int
Powiązane elementy interfejsu API
driverInfo | właściwość |
driverInfo:String
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Typ sterownika biblioteki graficznej używanego w tym kontekście renderowania. Wskazuje, czy renderowanie odbywa się przy użyciu oprogramowania, sterownika DirectX czy sterownika OpenGL. Wskazuje również, gdy nie powiodło się renderowanie sprzętowe. W przypadku niepowodzenia renderowania sprzętowego program Flash Player używa renderowania programowego obiektu Stage3D, a właściwość driverInfo
zawiera jedną z następujących wartości:
- „Software Hw_disabled=userDisabled” — Nie jest zaznaczone pole wyboru włączania przyspieszania sprzętowego w interfejsie użytkownika ustawień programu Adobe Flash Player.
- „Software Hw_disabled=oldDriver” — Są znane problemy ze sterownikiem karty graficznej. Aktualizacja sterownika karty graficznej może rozwiązać ten problem.
- „Software Hw_disabled=unavailable” — Są znane problemy ze sterownikiem karty graficznej lub wystąpił błąd podczas inicjowania tej karty.
- „Software Hw_disabled=explicit” — Zawartość jawnie zażądała renderowania programowego za pośrednictwem właściwości requestContext3D.
- „Software Hw_disabled=domainMemory” — Zawartość używa właściwości domainMemory, która wymaga licencji w przypadku stosowania razem z renderowaniem sprzętowym obiektu Stage3D. Informacje na ten temat można uzyskać na stronie adobe.com/go/fpl_pl.
Implementacja
public function get driverInfo():String
enableErrorChecking | właściwość |
enableErrorChecking:Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Określa, czy błędy napotkane przez moduł renderujący mają być zgłaszane aplikacji.
Jeśli właściwość enableErrorChecking
ma wartość true
, metody clear()
i drawTriangles()
są synchroniczne i mogą generować błędy. Jeśli właściwość enableErrorChecking
ma wartość false
, która jest wartością domyślną, metody clear()
, i drawTriangles()
są asynchroniczne, a błędy nie są zgłaszane. Włączenie sprawdzania błędów zmniejsza wydajność renderowania. Sprawdzanie błędów powinno być włączone tylko podczas debugowania.
Implementacja
public function get enableErrorChecking():Boolean
public function set enableErrorChecking(value:Boolean):void
Powiązane elementy interfejsu API
maxBackBufferHeight | właściwość |
maxBackBufferHeight:int
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 15, AIR 15 |
Określa maksymalną wysokość bufora tylnego. Wartością początkową jest limit systemowy na danej platformie. Tę właściwość można ustawić na wartość nie większą niż limit systemowy. Tę właściwość można ustawić na wartość nie mniejszą niż minimum systemowe. Gdy bufor tylny nie jest skonfigurowany, minimum jest wartością stałą wynoszącą 32. Po skonfigurowaniu bufora tylnego minimum przyjmuje wartość parametru wysokości z ostatniego pomyślnego wywołania metody configureBackBuffer()
.
Implementacja
public function get maxBackBufferHeight():int
public function set maxBackBufferHeight(value:int):void
maxBackBufferWidth | właściwość |
maxBackBufferWidth:int
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 15, AIR 15 |
Określa maksymalną szerokość bufora tylnego. Wartością początkową jest limit systemowy na danej platformie. Tę właściwość można ustawić na wartość nie większą niż limit systemowy. Tę właściwość można ustawić na wartość nie mniejszą niż minimum systemowe. Gdy bufor tylny nie jest skonfigurowany, minimum jest wartością stałą wynoszącą 32. Po skonfigurowaniu bufora tylnego minimum przyjmuje wartość parametru szerokości z ostatniego pomyślnego wywołania metody configureBackBuffer()
.
Implementacja
public function get maxBackBufferWidth():int
public function set maxBackBufferWidth(value:int):void
profile | właściwość |
supportsVideoTexture | właściwość |
totalGPUMemory | właściwość |
totalGPUMemory:Number
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 21, AIR 21 |
Zwraca całkowitą pamięć GPU przydzieloną przez struktury danych obiektów Stage3D aplikacji.
Po każdym utworzeniu obiektu zasobu GPU wykorzystana pamięć zostaje zapisana w klasie Context3D. Pamięć ta zawiera bufory indeksów, bufory wierzchołków (z wyjątkiem tekstury wideo) i programy utworzone za pomocą tej klasy Context3D.
Właściwość totalGPUMemory
API zwraca użytkownikowi całkowitą pamięć zużytą przez powyższe zasoby. Domyślnie zwracana jest wartość 0. Zwracana całkowita ilość pamięci GPU jest wyrażona w bajtach. Informacja te jest dostępna tylko w trybie pośrednim na urządzeniu mobilnym oraz w trybie pośrednim i GPU na komputerze. (W przypadku komputera użycie opcji <renderMode>gpu</renderMode>
spowoduje powrót do <renderMode>direct</renderMode>
)
Implementacja
public function get totalGPUMemory():Number
clear | () | metoda |
public function clear(red:Number = 0.0, green:Number = 0.0, blue:Number = 0.0, alpha:Number = 1.0, depth:Number = 1.0, stencil:uint = 0, mask:uint = 0xffffffff):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Służy do oczyszczania buforów kolorów, głębi i szablonów powiązanych z danym obiektem Context3D i wypełniania ich określonymi wartościami.
Skonfigurowanie parametru mask
umożliwia określenie buforów, które mają zostać wyczyszczone. Do konfigurowania parametru mask
służą stałe zdefiniowane w klasie Context3DClearMask. Za pomocą operatora sumy bitowej („|”) do parametru mask można dodać wiele buforów. Można również zastosować wywołanie Context3DClearMask.ALL
. Podczas renderowania do bufora tylnego należy wywołać metodę configureBackBuffer()
przed jakimkolwiek wywołaniem metody clear()
.
Uwaga: Jeżeli określona wartość parametru wykracza poza dozwolony zakres, wartości liczbowe parametrów są sprowadzane do zakresu od 0 do 1 bez powiadamiania o tej operacji. Jeśli wartość parametru stencil
jest większa niż 0xff, zostaje dla niego ustawiona wartość 0xff.
Parametry
red:Number (default = 0.0 ) — Czerwony składnik koloru służący do czyszczenia bufora koloru, wyrażony jako wartość z zakresu od 0 do 1.
| |
green:Number (default = 0.0 ) — Zielony składnik koloru służący do czyszczenia bufora koloru, wyrażony jako wartość z zakresu od 0 do 1.
| |
blue:Number (default = 0.0 ) — Niebieski składnik koloru służący do czyszczenia bufora koloru, wyrażony jako wartość z zakresu od 0 do 1.
| |
alpha:Number (default = 1.0 ) — Składnik alfa koloru służący do czyszczenia bufora koloru, wyrażony jako wartość z zakresu od 0 do 1. Składnik alfa nie jest używany do mieszania. Jest on zapisywany bezpośrednio w buforze alfa.
| |
depth:Number (default = 1.0 ) — Wartość służąca do czyszczenia bufora głębi, należąca do zakresu od 0 do 1.
| |
stencil:uint (default = 0 ) — Wartość 8-bitowa służący do czyszczenia bufora szablonu, należąca do zakresu od 0x00 do 0xFF.
| |
mask:uint (default = 0xffffffff ) — Parametr określający bufory, które mają zostać wyczyszczone.
|
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.
|
Powiązane elementy interfejsu API
configureBackBuffer | () | metoda |
public function configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Ustawia wymiary widoku i innych atrybutów bufora renderowania.
Renderowanie jest wykonywane przy użyciu dwóch buforów. Bufor tylny zastępuje widoczny bufor przedni w momencie wywołania metody present()
. Minimalny rozmiar bufora wynosi 32 x 32 pikseli. Maksymalny rozmiar bufora tylnego jest ograniczony możliwościami urządzenia. Może go też ustawić użytkownik za pomocą parametrów maxBackBufferWidth
i maxBackBufferHeight
. Konfigurowanie bufora jest czasochłonną operacją. Należy unikać zmieniania rozmiaru lub atrybutów bufora w ramach normalnych operacji renderowania.
Parametry
width:int — Szerokość bufora wyrażona w pikselach.
| |||||||||
height:int — Wysokość bufora wyrażona w pikselach.
| |||||||||
antiAlias:int — Liczba całkowita określająca żądaną jakość wygładzania. Wartość ta odpowiada liczbie podpróbek używanych podczas wygładzania. Użycie większej liczby podpróbek wymaga dodatkowych obliczeń, jednak rzeczywisty wpływ tego procesu na wydajność zależy od konkretnego sprzętu używanego do renderowania. Typ wygładzania i to, czy wygładzanie jest w ogóle wykonywane, zależy od urządzenia i trybu renderowania. Wygładzanie nie jest obsługiwane w kontekście renderowania programowego.
| |||||||||
enableDepthAndStencil:Boolean (default = true ) — Wartość false oznacza, że nie jest tworzona głębia ani nie jest tworzony szablon, a wartość true powoduje utworzenie głębi i bufora szablonu. Jeśli w aplikacji przeznaczonej dla środowiska AIR 3.2 lub nowszego skompilowanej przy użyciu formatu SWF w wersji 15 lub nowszej element renderMode w pliku deskryptora aplikacji ma wartość direct , to element depthAndStencil w tym pliku deskryptora aplikacji musi mieć taką samą wartość jak ten argument. Domyślnie element depthAndStencil ma wartość false .
| |||||||||
wantsBestResolution:Boolean (default = false ) — Wartość true wskazuje, że jeśli urządzenie obsługuje ekrany o wysokiej rozdzielczości, to próbuje przydzielić bufor tylny większy, niż wskazują na to parametry szerokości i wysokości. Ta funkcja dodaje więcej pikseli i potencjalnie zmienia wyniki operacji modułu cieniującego, dlatego domyślnie jest wyłączona. Aby określić stopień powiększenia natywnego bufora tylnego, należy użyć właściwości Stage.contentsScaleFactor.
| |||||||||
wantsBestResolutionOnBrowserZoom:Boolean (default = false ) — Wartość true oznacza, że rozmiar bufora tylnego powinien być zwiększany proporcjonalnie do współczynnika powiększenia przeglądarki. Ustawienie tej wartości jest zachowywane dla różnych powiększeń przeglądarki. Wartość domyślna tego parametru to false . Aby ograniczyć stopień powiększenia bufora tylnego, można ustawić parametry maxBackBufferWidth i maxBackBufferHeight . Parametry backBufferWidth i backBufferHeight pozwalają określić bieżący rozmiar bufora tylnego.
|
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Nieprawidłowy rozmiar danych wejściowych: Parametr szerokości lub wysokości jest mniejszy niż minimalny lub większy niż maksymalny dopuszczalny rozmiar bufora tylnego.
| |
Error — 3709: flaga depthAndStencil w deskryptorze aplikacji musi odpowiadać wartości enableDepthAndStencil (typu Boolean) przekazanej do metody configureBackBuffer() obiektu Context3D.
|
createCubeTexture | () | metoda |
public function createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Tworzy obiekt CubeTexture.
Obiekt CubeTexture służy do wysyłania bitmap tekstur sześciennych do kontekstu renderowania. Pozwala także odnosić się do tekstury sześciennej w trakcie renderowania. Tekstura sześcienna składa się z sześciu tekstur kwadratów o tej samej wielkości ułożonych w topologii sześciennej i jest przydatna do opisywania map środowiska.
Nie można tworzyć obiektów CubeTexture przy użyciu konstruktora klasy CubeTexture. Należy korzystać z omawianej metody. Po utworzeniu obiektu CubeTexture należy wysłać dane bitmapy tekstury za pomocą metody uploadFromBitmapData()
, uploadFromByteArray()
lub uploadCompressedTextureFromByteArray()
klasy CubeTexture.
Parametry
size:int — Długość krawędzi tekstury w tekselach.
| |
format:String — Format tekseli (z listy numerowanej Context3DTextureFormat).
Kompresja tekstur umożliwia przechowywanie obrazów tekstur bezpośrednio w GPU, co zapewnia oszczędność pamięci i redukuje wymaganą przepustowości pamięci. Tekstury są zazwyczaj kompresowane offline i wysyłane do GPU w formie skomprezowanej przy użyciu metody Texture.uploadCompressedTextureFromByteArray. Platformy komputerowe Flash Player 11.4 i AIR 3.4 obsługują obecnie kompresję tekstur w czasie wykonywania. Może to być przydatne w pewnych sytuacjach, na przykład w przypadku renderowania tekstur dynamicznych z grafiki wektorowej. Ta funkcja nie jest dostępna na platformach przenośnych. Jest na nich generowany wyjątek ArgumentError (Texture Format Mismatch). Aby użyć kompresji w czasie wykonywania, wykonaj następujące czynności: 1. Utwórz obiekt tekstury przez wywołanie metody Context3D.createCubeTexture(), przekazując jako parametr formatu wartość flash.display3D.Context3DTextureFormat.COMPRESSED lub flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA. 2. Za pomocą wystąpienia klasy flash.display3D.textures.Texture zwróconego przez metodę createCubeTexture() wywołaj metodę flash.display3D.textures.CubeTexture.uploadFromBitmapData() lub flash.display3D.textures.CubeTexture.uploadFromByteArray(), aby wysłać i skompresować teksturę w jednym kroku. | |
optimizeForRenderToTexture:Boolean — Należy ustawić wartość true , jeśli tekstura będzie prawdopodobnie używana jako element docelowy renderowania.
| |
streamingLevels:int (default = 0 ) — Poziom mipmapy musi zostać wczytany przed renderowaniem obrazu. Przesyłanie strumieniowe tekstur umożliwia wczytywanie i wyświetlanie najpierw najniższych poziomów mipmap, a następnie wyświetlanie kolejnych obrazów o wyższej jakości w miarę wczytywania tekstur. Użytkownicy końcowi widzą w aplikacji obrazy o niskiej jakości w trakcie wczytywania obrazów o wyższej jakości.
Domyślnie wartość streamingLevels wynosi 0, co oznacza konieczność wczytania mipmapy o najwyższej jakości przed renderowaniem obrazu. Tan parametr dodano w programie Flash Player 11.3 i środowisku AIR 3.3. Aby uzyskać zachowanie analogiczne do wcześniejszych wersji programu Flash Player i środowiska AIR, należy użyć wartości domyślnej. Aby umożliwić przesyłanie strumieniowe tekstur, należy ustawić dla właściwości Uwaga: Ustawienie wartości wyższej niż 0 dla tej właściwości może zwiększyć użycie pamięci i obniżyć wydajność. |
flash.display3D.textures:CubeTexture |
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów Texture lub zostanie przekroczona ilość pamięci przydzielonej na tekstury.
| |
ArgumentError — Brak implementacji tekstury głębi: w przypadku próby utworzenia tekstury głębi.
| |
ArgumentError — Zerowy rozmiar tekstury: jeśli parametr size nie jest większy niż zero.
| |
ArgumentError — Rozmiar tekstury inny niż potęga liczby 2: jeśli wartość parametru size nie jest potęgą liczby 2.
| |
ArgumentError — Zbyt duża tekstura: jeśli parametr size ma wartość większą niż 1024.
| |
Error — Niepowodzenie tworzenia tekstury: jeśli kontekst renderowania nie może utworzyć obiektu CubeTexture (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).
| |
ArgumentError — Nieprawidłowy poziom przesyłania strumieniowego: Jeśli wartość streamingLevels jest nie mniejsza niż log2(rozmiar).
|
Powiązane elementy interfejsu API
createIndexBuffer | () | metoda |
public function createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Tworzy obiekt IndexBuffer3D.
Obiekt IndexBuffer3D umożliwia wysłanie zestawu indeksów trójkątów do kontekstu renderowania. Pozwala też odnosić się do tego zestawu indeksów na potrzeby renderowania. Każdy indeks w buforze indeksów odnosi się do odpowiadającego mu wierzchołka w buforze wierzchołków. Każdy zestaw trzech indeksów identyfikuje trójkąt. Przekazując obiekt IndexBuffer3D do metody drawTriangles()
, można renderować trójkąt lub trójkąty zgodnie z definicją w buforze indeksów.
Nie można tworzyć obiektów IndexBuffer3D przy użyciu konstruktora klasy IndexBuffer3D. Zamiast tego należy użyć omawianej metody. Po utworzeniu obiektu IndexBuffer3D do wysyłania indeksów można używać metod uploadFromVector()
i uploadFromByteArray()
klasy IndexBuffer3D.
Parametry
numIndices:int — Liczba wierzchołków, które mają być przechowywane w buforze.
| |
bufferUsage:String (default = "staticDraw ") — Oczekiwane użycie bufora. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DBufferUsage . Sterownik sprzętowy może przeprowadzić optymalizację, jeśli zostanie prawidłowo skonfigurowany. Ten parametr jest dostępny od wersji Flash 12/AIR 4.
|
IndexBuffer3D |
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów indeksów lub zostanie przekroczona ilość pamięci przydzielonej na bufory indeksów.
| |
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.
| |
ArgumentError — Zbyt duży bufor: Gdy wartość numIndices jest nie mniejsza niż 0xf0000.
|
Powiązane elementy interfejsu API
createProgram | () | metoda |
public function createProgram():Program3D
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Tworzy obiekt Program3D.
Obiekt Program3D służy do wysyłania programów modułów cieniujących do kontekstu renderowania i pozwala odnosić się do wysłanych programów w trakcie renderowania. Obiekt Program3D przechowuje dwa programy — program wierzchołków i program fragmentów (określany także jako program pikseli). Te programy są napisane w binarnym języku modułu cieniującego.
Nie można tworzyć obiektów Program3D przy użyciu konstruktora klasy Program3D. Zamiast tego należy użyć omawianej metody. Po utworzeniu obiektu Program3D należy wysłać do niego programy za pomocą metody upload()
klasy Program3D.
Program3D |
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Liczba programów przekracza 4096 lub całkowity rozmiar w pamięci przekracza 16 MB. (Należy zwolnić zasoby obiektu Program3D za pomocą metody dispose ).
|
Powiązane elementy interfejsu API
Przykład ( Sposób korzystania z tego przykładu )
renderContext
jest wystąpieniem klasy Context3D. Programy w tym przykładzie są napisane w języku AGAL (Adobe Graphics Assembly Language).
//A simple vertex program in AGAL const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + "mov v0, va1"; //A simple fragment (or pixel) program in AGAL const FRAGMENT_SHADER:String = "mov oc, v0"; var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var programPair:Program3D; //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair );
createRectangleTexture | () | metoda |
public function createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.8, AIR 3.8 |
Tworzy obiekt RectangleTexture.
Obiekt RectangleTexture służy do wysyłania bitmap tekstur do kontekstu renderowania i pozwala odnosić się do tekstury w trakcie renderowania.
Nie można tworzyć obiektów RectangleTexture przy użyciu konstruktora klasy RectangleTexture. Należy używać omawianej metody. Po utworzeniu obiektu RectangleTexture można wysłać bitmapy tekstur za pomocą metody uploadFromBitmapData()
lub uploadFromByteArray()
klasy Texture.
Tekstury oparte na 32-bitowych liczbach całkowitych są przechowywane w spakowanym formacie BGRA, tak aby pasowały do formatu BitmapData
programu Flash. Tekstury zmiennoprzecinkowe korzystają ze zwykłego formatu RGBA.
Tekstury prostokątne różnią się od zwykłych tekstur 2D tym, że ich szerokości i wysokości nie muszą być potęgami liczby 2. Nie zawierają one także mipmap. Są one najbardziej przydatne w przypadku renderowania do tekstur. Użycie tekstury prostokątnej z próbnikiem korzystającym z filtrowania mipmap lub wielokrotnego opakowania powoduje niepowodzenie wywołania metody drawTriangles. Tekstury prostokątne nie pozwalają też na przesyłanie strumieniowe. W przypadku tekstur prostokątnych są obsługiwane tylko formaty tekstur BGRA, BGR_PACKED, BGRA_PACKED. Tekstury prostokątne nie pozwalają korzystać z formatów tekstur skompresowanych.
Parametry
width:int — Szerokość tekstury w tekselach.
| |
height:int — Wysokość tekstury w tekselach.
| |
format:String — Format tekseli (z listy numerowanej Context3DTextureFormat).
| |
optimizeForRenderToTexture:Boolean — Należy ustawić wartość true , jeśli tekstura będzie prawdopodobnie używana jako element docelowy renderowania.
|
flash.display3D.textures:RectangleTexture |
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów Texture lub zostanie przekroczona ilość pamięci przydzielonej na tekstury.
| |
ArgumentError — Zerowy rozmiar tekstury: Jeśli dowolny z parametrów width i height nie ma wartości większej niż zero.
| |
ArgumentError — Zbyt duża tekstura: jeśli dowolny z parametrów width i height ma wartość większą niż 2048.
| |
Error — Niepowodzenie tworzenia tekstury: jeśli kontekst renderowania nie może utworzyć obiektu Texture (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).
| |
Error — Wymaga co najmniej profilu podstawowego: Jeśli tekstura prostokątna zostanie utworzona z profilem podstawowym ograniczonym.
|
Powiązane elementy interfejsu API
createTexture | () | metoda |
public function createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Tworzy obiekt Texture.
Obiekt Texture służy do wysyłania bitmap tekstur do kontekstu renderowania i pozwala odnosić się do tekstury w trakcie renderowania.
Nie można tworzyć obiektów Texture przy użyciu konstruktora klasy Texture. Należy korzystać z omawianej metody. Po utworzeniu obiektu Texture należy wysłać bitmapy tekstur za pomocą metody uploadFromBitmapData()
, uploadFromByteArray()
lub uploadCompressedTextureFromByteArray()
klasy Texture.
Tekstury oparte na 32-bitowych liczbach całkowitych są przechowywane w spakowanym formacie BGRA, tak aby pasowały do formatu BitmapData
programu Flash. Tekstury zmiennoprzecinkowe korzystają ze zwykłego formatu RGBA.
Parametry
width:int — Szerokość tekstury w tekselach.
| |
height:int — Wysokość tekstury w tekselach.
| |
format:String — Format tekseli (z listy numerowanej Context3DTextureFormat).
Kompresja tekstur umożliwia przechowywanie obrazów tekstur bezpośrednio w GPU, co zapewnia oszczędność pamięci i redukuje wymaganą przepustowości pamięci. Tekstury są zazwyczaj kompresowane offline i wysyłane do GPU w formie skomprezowanej przy użyciu metody Texture.uploadCompressedTextureFromByteArray. Platformy komputerowe Flash Player 11.4 i AIR 3.4 obsługują obecnie kompresję tekstur w czasie wykonywania. Może to być przydatne w pewnych sytuacjach, na przykład w przypadku renderowania tekstur dynamicznych z grafiki wektorowej. Ta funkcja nie jest dostępna na platformach przenośnych. Jest na nich generowany wyjątek ArgumentError (Texture Format Mismatch). Aby użyć kompresji w czasie wykonywania, wykonaj następujące czynności: 1. Utwórz obiekt tekstury przez wywołanie metody Context3D.createTexture(), przekazując jako parametr formatu wartość flash.display3D.Context3DTextureFormat.COMPRESSED lub flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA. 2. Za pomocą wystąpienia klasy flash.display3D.textures.Texture zwróconego przez metodę createTexture() wywołaj metodę flash.display3D.textures.Texture.uploadFromBitmapData() lub flash.display3D.textures.Texture.uploadFromByteArray(), aby wysłać i skompresować teksturę w jednym kroku. | |
optimizeForRenderToTexture:Boolean — Należy ustawić wartość true , jeśli tekstura będzie prawdopodobnie używana jako element docelowy renderowania.
| |
streamingLevels:int (default = 0 ) — Poziom mipmapy musi zostać wczytany przed renderowaniem obrazu. Przesyłanie strumieniowe tekstur umożliwia wczytywanie i wyświetlanie najpierw najniższych poziomów mipmap, a następnie wyświetlanie kolejnych obrazów o wyższej jakości w miarę wczytywania tekstur. Użytkownicy końcowi widzą w aplikacji obrazy o niskiej jakości w trakcie wczytywania obrazów o wyższej jakości.
Domyślnie wartość streamingLevels wynosi 0, co oznacza konieczność wczytania mipmapy o najwyższej jakości przed renderowaniem obrazu. Tan parametr dodano w programie Flash Player 11.3 i środowisku AIR 3.3. Aby uzyskać zachowanie analogiczne do wcześniejszych wersji programu Flash Player i środowiska AIR, należy użyć wartości domyślnej. Aby umożliwić przesyłanie strumieniowe tekstur, należy ustawić dla właściwości Uwaga: Ustawienie wartości wyższej niż 0 dla tej właściwości może zwiększyć użycie pamięci i obniżyć wydajność. |
flash.display3D.textures:Texture |
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów Texture lub zostanie przekroczona ilość pamięci przydzielonej na tekstury.
| |
ArgumentError — Brak implementacji tekstury głębi: w przypadku próby utworzenia tekstury głębi.
| |
ArgumentError — Zerowy rozmiar tekstury: jeśli dowolny z parametrów width i height nie ma wartości większej niż zero.
| |
ArgumentError — Rozmiar tekstury inny niż potęga liczby 2: jeśli dowolny z parametrów width i height nie ma wartości będącej potęgą liczby 2.
| |
ArgumentError — Zbyt duża tekstura: jeśli dowolny z parametrów width i height ma wartość większą niż 2048 w przypadku profilu podstawowego i podstawowego ograniczonego albo jeden z parametrów width i height ma wartość większą niż 4096 w przypadku profilu podstawowego rozszerzonego lub wyższego.
| |
Error — Niepowodzenie tworzenia tekstury: jeśli kontekst renderowania nie może utworzyć obiektu Texture (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).
| |
ArgumentError — Nieprawidłowy poziom przesyłania strumieniowego: Jeśli wartość streamingLevels jest nie mniejsza niż log2(minimim(szerokość,wysokość)).
|
Powiązane elementy interfejsu API
createVertexBuffer | () | metoda |
public function createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Tworzy obiekt VertexBuffer3D.
Obiekt VertexBuffer3D służy do wysyłania zestawów danych wierzchołków do kontekstu renderowania. Bufor wierzchołków zawiera dane potrzebne do renderowania wszystkich punktów w geometrii sceny. Atrybuty danych skojarzone z każdym wierzchołkiem zazwyczaj obejmują jego położenie, kolor i współrzędne tekstury. Są stosowane jako dane wejściowe programu modułu cieniującego wierzchołków. Metoda setVertexBufferAt()
pozwala określić wartości danych powiązane z jednym z parametrów wejściowych programu wierzchołków. Dla każdego wierzchołka można określić maksymalnie 60 wartości 32-bitowych.
Nie można tworzyć obiektów VertexBuffer3D przy użyciu konstruktora klasy VertexBuffer3D. Zamiast tego należy użyć omawianej metody. Po utworzeniu obiektu VertexBuffer3D do wysyłania danych wierzchołków można używać metod uploadFromVector()
i uploadFromByteArray()
klasy VertexBuffer3D.
Parametry
numVertices:int — Liczba wierzchołków, które mają być przechowywane w buforze. Maksymalna liczba wierzchołków w pojedynczym buforze wynosi 65535.
| |
data32PerVertex:int — Liczba 32-bitowych (4-bajtowych) wartości danych skojarzonych z każdym wierzchołkiem. Maksymalna liczba 32-bitowych elementów danych w wierzchołku wynosi 64 (256 bajtów). Program modułu cieniującego wierzchołków może uzyskiwać dostęp tylko do ośmiu rejestrów atrybutów naraz. Do wybierania atrybutów z bufora wierzchołków należy używać metody SetVertextBufferAt() .
| |
bufferUsage:String (default = "staticDraw ") — Oczekiwane użycie bufora. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DBufferUsage . Sterownik sprzętowy może przeprowadzić optymalizację, jeśli zostanie prawidłowo skonfigurowany. Ten parametr jest dostępny od wersji Flash 12/AIR 4.
|
VertexBuffer3D |
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów buforów wierzchołków lub zostanie przekroczona ilość pamięci przydzielonej na bufory wierzchołków.
| |
ArgumentError — Zbyt duży bufor: gdy właściwość numVertices ma wartość większą niż 0x10000 lub parametr data32PerVertex ma wartość większą niż 64.
| |
ArgumentError — Zerowy rozmiar bufora: gdy właściwość numVertices lub data32PerVertex ma wartość zero.
| |
ArgumentError — Niepowodzenie tworzenia bufora: jeśli kontekst renderowania nie może utworzyć obiektu VertexBuffer3D (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).
| |
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.
|
Powiązane elementy interfejsu API
Przykład ( Sposób korzystania z tego przykładu )
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
createVertexBufferForInstances | () | metoda |
public function createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 20.0 |
Tworzy obiekt VertexBuffer3D na dane wystąpień.
Obiekt VertexBuffer3D służy do wysyłania zestawów danych wystąpień do kontekstu renderowania. Bufor wierzchołków zawiera dane potrzebne do renderowania wszystkich wystąpień w geometrii sceny. Bufory wierzchołków z danymi wystąpień zawierają atrybuty wspólne dla wszystkich wierzchołków danego wystąpienia. Służą one jako dane wejściowe programu modułu cieniującego wierzchołków. Metoda setVertexBufferAt()
pozwala określić wartości danych powiązane z jednym z parametrów wejściowych programu wierzchołków. Dla każdego elementu bufora wierzchołków można określić maksymalnie 64 wartości 32-bitowe.
Nie można tworzyć obiektów VertexBuffer3D przy użyciu konstruktora klasy VertexBuffer3D. Zamiast tego należy użyć omawianej metody. Po utworzeniu obiektu VertexBuffer3D do wysyłania danych wierzchołków można używać metod uploadFromVector()
i uploadFromByteArray()
klasy VertexBuffer3D.
Parametry
numVertices:int — Liczba elementów, które mają być przechowywane w buforze. Maksymalna liczba elementów w pojedynczym buforze wynosi 65 535.
| |
data32PerVertex:int — Liczba 32-bitowych (4-bajtowych) wartości danych skojarzonych z każdym elementem. Maksymalna liczba 32-bitowych elementów danych w wierzchołku wynosi 64 (256 bajtów).
| |
instancesPerElement:int — Liczba wystąpień, które używają jednego elementu z bufora wierzchołków.
| |
bufferUsage:String (default = "staticDraw ") — Oczekiwane użycie bufora. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DBufferUsage . Sterownik sprzętowy może przeprowadzić optymalizację, jeśli zostanie prawidłowo skonfigurowany. Ten parametr jest dostępny od wersji Flash 12/AIR 4.
|
VertexBuffer3D |
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów buforów wierzchołków lub zostanie przekroczona ilość pamięci przydzielonej na bufory wierzchołków.
| |
ArgumentError — Zbyt duży bufor: gdy właściwość numVertices ma wartość większą niż 0x10000 lub parametr data32PerVertex ma wartość większą niż 64.
| |
ArgumentError — Zerowy rozmiar bufora: gdy właściwość numVertices lub data32PerVertex ma wartość zero.
| |
ArgumentError — Niepowodzenie tworzenia bufora: jeśli kontekst renderowania nie może utworzyć obiektu VertexBuffer3D (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).
| |
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.
| |
Error — Wymaga profilu standardowego rozszerzonego lub wyższego: W przypadku wywołania tej metody, gdy żądany profil jest niższy niż standardowy rozszerzony.
| |
Error — Nieprawidłowa liczba wystąpień na element: Jeśli wartość instancesPerElement jest mniejsza niż zero.
|
Powiązane elementy interfejsu API
createVideoTexture | () | metoda |
public function createVideoTexture():flash.display3D.textures:VideoTexture
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 17.0, Flash Player 18.0 |
Tworzy nowy obiekt VideoTexture.
Obiekt VideoTexture pozwala uzyskać klatki wideo jako teksturę z obiektu NetStream lub Camera i wysłać te klatki wideo do kontekstu renderowania.
Obiektu VideoTexture nie można utworzyć przy użyciu konstruktora obiektów VideoTexture. Zamiast tego należy użyć tej metody. Po utworzeniu obiektu VideoTexture dołącz obiekt NetStream lub Camera, aby uzyskać klatki wideo, stosując metodę obiektu VideoTexture attachNetStream()
lub attachCamera()
.
Ta metoda zwraca wartość null, jeśli system nie obsługuje odpowiedniej funkcji.
Obiekt VideoTexture nie zawiera mipmap. Użycie obiektu VideoTexture z próbnikiem korzystającym z filtrowania mipmap lub wielokrotnego opakowania powoduje niepowodzenie wywołania metody drawTriangles. Obiekt VideoTexture można traktować jako teksturę BGRA w modułach cieniujących. Próba utworzenia wystąpienia obiektu VideoTexture kończy się niepowodzeniem, jeśli zażądano obiektu Context3D z trybem renderowania programowego.
Dla każdego wystąpienia obiektu Context3D dostępne są maksymalnie 4 obiekty VideoTexture. W przypadku urządzeń mobilnych rzeczywista liczba obsługiwanych obiektów VideoTexture może być mniejsza niż 4 z uwagi na ograniczenia platformy.
Zwracaflash.display3D.textures:VideoTexture |
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów Texture lub zostanie przekroczona ilość pamięci przydzielonej na tekstury.
| |
Error — Niepowodzenie tworzenia tekstury: Jeśli kontekst renderowania nie może utworzyć obiektu Texture (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).
|
dispose | () | metoda |
public function dispose(recreate:Boolean = true):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Zwalnia wszystkie zasoby i cały magazyn wewnętrzny związane z danym obiektem Context3D.
Wszystkie bufory indeksów, bufory wierzchołków, tekstury i programy utworzone za pomocą tego obiektu Context3D są zwalniane tak samo, jakby względem każdego z tych elementów wywołano metodę dispose()
. Ponadto jest zwalniany sam obiekt Context3D, co powoduje zwolnienie wszystkich buforów tymczasowych i bufora tylnego. Wywołanie metody configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer() lub drawToBitmapData() po wywołaniu metody dispose() powoduje wygenerowanie wyjątku przez środowisko wykonawcze.
Uwaga: Wywołanie metody dispose() na obiekcie Context3D w sytuacji, gdy nadal jest ustawiony detektor zdarzeń Events.CONTEXT3D_CREATE dla powiązanego obiektu Stage3D, spowoduje symulację utraty urządzenia. Na obiekcie Stage3D zostanie utworzony nowy obiekt Context3D i ponownie zostanie wygenerowane zdarzenie Events.CONTEXT3D_CREATE. Jeśli nie ma się tak dziać, należy usunąć detektor zdarzeń z obiektu Stage3D przed wywołaniem metody dispose() lub ustawić dla parametru recreate wartość false.
Parametry
recreate:Boolean (default = true )
|
Powiązane elementy interfejsu API
flash.display.Stage3D
drawToBitmapData | () | metoda |
public function drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 3 |
Rysuje w bitmapie bieżący bufor mechanizmu renderującego.
Bieżąca zawartość tylnego bufora renderowania jest kopiowana do obiektu BitmapData. Ta operacja może być bardzo czasochłonna i zająć nawet sekundę. Należy używać z ostrożnością. Ta funkcja nie kopiuje przedniego bufora renderowania (bufora wyświetlanego na stole montażowym). Działa na buforze, w którym odbywa się rysowanie. Aby przechwycić renderowany obraz wyświetlany na stole montażowym, należy wywołać metodę drawToBitmapData()
natychmiast po wywołaniu metody present()
.
Począwszy od wersji 25 środowiska AIR w interfejsie API drawToBitmapData()
wprowadzono dwa nowe parametry. Teraz ten interfejs API zawiera trzy parametry. Pierwszym z nich jest istniejący parametr destination:BitmapData
. Drugi parametr to srcRect:Rectangle
. Oznacza on docelowy prostokąt na obiekcie stage3D. Trzeci parametr to destPoint:Point
. Oznacza on współrzędną na docelowej mapie bitowej. Parametry srcRect i destPoint są opcjonalne i domyślne odpowiednio dla wartości (0,0,bitmapWidth,bitmapHeight) i (0,0).
Podczas rysowania obrazu nie jest on skalowany w celu dopasowania do bitmapy. Zamiast tego zawartość jest przycinana do rozmiaru bitmapy docelowej.
Obiekty BitmapData programu Flash przechowują kolory pomnożone już przez składnik alfa. Jeśli na przykład czyste składowe kolorów RGB piksela mają wartości (0x0A, 0x12, 0xBB), a składnik alfa ma wartość 0x7F (0,5), piksel jest przechowywany w obiekcie BitmapData z wartościami RGBA (0x05, 0x09, 0x5D, 0x7F). Można ustawić współczynniki mieszania tak, aby kolory renderowane do bufora były mnożone przez współczynnik alfa. Można też wykonać tę operację w module cieniującym fragmentów. Kontekst renderowania nie sprawdza, czy kolory są przechowywane w formacie z mnożeniem wstępnym.
Parametry
destination:BitmapData | |
srcRect:Rectangle (default = null )
| |
destPoint:Point (default = null )
|
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.
| |
Error — 3802: Jeśli którykolwiek z parametrów destPoint:Point lub srcRect:Rectangle wykracza poza granicę współrzędnych obiektu bitmapy/stage3D lub jeśli jako dane wejściowe przesłano wartości nieliczbowe (NaN).
|
Przykład ( Sposób korzystania z tego przykładu )
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.filters.DropShadowFilter; public class Context3D_drawToBitmapData extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var bitmap:Bitmap; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_drawToBitmapData() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 0; stage3D.y = 0; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes 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 ] ); vertexes = 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 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); //Clear required before first drawTriangles() call renderContext.clear( .3,.3,.3 ); //Draw the 2 triangles renderContext.drawTriangles( indexList, 0, 2 ); var renderedBitmapData:BitmapData = new BitmapData( viewWidth, viewHeight, true ); renderContext.drawToBitmapData( renderedBitmapData ); renderContext.present(); //Add to stage bitmap = new Bitmap( renderedBitmapData ); this.addChild( bitmap ); bitmap.x = 55; bitmap.y = 25; bitmap.filters = [new DropShadowFilter( 8, 235, .4 )]; } } }
drawTriangles | () | metoda |
public function drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Metoda umożliwia renderowanie określonych trójkątów z użyciem bieżących buforów i stanu obiektu Context3D.
Wierzchołki każdego trójkąta są przetwarzane przez program modułu cieniującego wierzchołków, a powierzchnia każdego trójkąta — przez program modułu cieniującego pikseli. Kolor wyjściowy z programu pikseli dla każdego piksela jest rysowany w miejscu docelowym renderowania zgodnie z operacjami na szablonach, testem głębi, źródłową i docelową wartością alfa oraz bieżącym trybem mieszania. Celem renderowania może być główny bufor renderowania lub tekstura.
Jeśli jest aktywny tryb wyłączania (w przypadku użycia metody setCulling()
), trójkąty mogą być odrzucane ze sceny przed uruchomieniem programu pikseli. Jeśli jest aktywny tryb testowania szablonów i głębi, piksele generowane przez program pikseli mogą być odrzucane bez aktualizowania miejsca docelowego renderowania. Również program pikseli może ustalić, że nie należy generować koloru dla piksela.
Renderowanie trójkąty nie są wyświetlane w widoku, dopóki nie zostanie wywołana metoda present()
. Po każdym wywołaniu metody present()
należy wywołać metodę clear()
, zanim nastąpi pierwsze wywołanie metody drawTriangles()
. W przeciwnym razie renderowanie nie powiedzie się.
Jeśli właściwość enableErrorChecking
ma wartość false
, ta funkcja natychmiast kończy działanie bez oczekiwania na wyniki, a wyjątki są generowane tylko w przypadku zwolnienia wystąpienia obiektu Context3D lub zbyt dużej liczby wywołań rysowania. Jeśli stan kontekstu renderowania jest nieprawidłowy, renderowanie kończy się niepowodzeniem bez powiadomienia. Jeśli właściwość enableErrorChecking
ma wartość true
, ta funkcja zwraca wartość po narysowaniu trójkątów, a wyjątki są generowane w przypadku wszystkich błędów rysowania i niewłaściwych stanów kontekstu.
Parametry
indexBuffer:IndexBuffer3D — Zestaw indeksów wierzchołków określających wierzchołki do renderowania.
| |
firstIndex:int (default = 0 ) — Indeks pierwszego indeksu wierzchołka wybranego do renderowania. Domyślnie ta wartość wynosi 0.
| |
numTriangles:int (default = -1 ) — Liczba trójkątów do renderowania. Każdy trójkąt wymaga trzech indeksów. Przekazanie wartości –1 powoduje narysowanie wszystkich trójkątów w buforze indeksu. Domyślnie ta wartość wynosi 1.
|
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Występuje, jeśli metoda została wywołana zbyt wiele razy między wywołaniami metody present() . Maksymalna liczba wywołań wynosi 32 768.
Następujące błędy są generowane tylko wtedy, gdy właściwość | |
Error — Trzeba wyczyścić przed rysowaniem: jeśli bufor nie został wyczyszczony od ostatniego wywołania metody present() .
| |
Error — Jeśli nie jest ustawiony prawidłowy obiekt Program3D.
| |
Error — Nie ustawiono prawidłowego bufora indeksów: jeśli nie jest ustawiony obiekt IndexBuffer3D.
| |
Error — Błąd testu sensowności parametrów: gdy liczba trójkątów do narysowania lub wartość firstIndex przekracza dozwolony limit.
| |
RangeError — Zbyt mało indeksów w tym buforze: gdy bufor nie zawiera indeksów w liczbie wystarczającej do zdefiniowania liczby wierzchołków do narysowania.
| |
Error — Próbka powiązana z teksturą powiązaną też z mechanizmem renderowania: gdy celem renderowania jest tekstura i ta tekstura jest przypisana do tekstury wejściowej bieżącego programu fragmentów.
| |
Error — Próbka powiązana z nieprawidłową teksturą: jako parametr wejściowy bieżącego programu fragmentów określono nieprawidłową teksturę.
| |
Error — Format próbnika niezgodny z formatem tekstury: gdy tekstura przypisana jako parametr wejściowy bieżącego programu fragmentów ma inny format niż określony w rejestrze próbnika. Tekstura 2D może na przykład być przypisana do próbnika tekstury sześciennej.
| |
Error — Próbka powiązana z niezdefiniowaną teksturą: bieżący program fragmentów uzyskuje dostęp do rejestru tekstur, którego nie ustawiono (za pomocą metody setTextureAt() ).
| |
Error — Te same parametry próbnika wymagane przy tej samej teksturze: Jeśli tekstura jest używana dla więcej niż jednego rejestru próbnika, wszystkie próbniki muszą mieć takie same ustawienia. Nie można na przykład ustawić jednego próbnika na ściskanie, a innego na opakowywanie.
| |
Error — Tekstura powiązana, ale nie używana: ustawiono teksturę jako parametr wejściowy modułu cieniującego, ale nie jest ona używana.
| |
Error — Nieużywany strumień: do wejścia atrybutów wierzchołka przypisano bufor wierzchołków, ale program wierzchołków nie odnosi się do powiązanego z buforem rejestru.
| |
Error — Nieprawidłowy strumień: obiekt VertexBuffer3D przypisany do programu wierzchołków nie jest prawidłowym obiektem.
| |
RangeError — Za mało wierzchołków w strumieniu: bufor wierzchołków dostarczający dane do rysowania określonych trójkątów zawiera zbyt mało danych.
| |
RangeError — Przesunięcie wierzchołka w strumieniu poza zakresem: przesunięcie określone w wywołaniu metody setVertexBufferAt() jest ujemne lub wykracza poza koniec bufora.
| |
Error — Strumień odczytywany, ale nie ustawiony: atrybut wierzchołka używany przez bieżący program wierzchołków nie został ustawiony (za pomocą metody setVertexBufferAt() ).
|
Powiązane elementy interfejsu API
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Przykład ( Sposób korzystania z tego przykładu )
Do definiowania trójkątów służą bufor wierzchołków i bufor indeksów. Bufor wierzchołków zawiera informacje o położeniu i kolorze każdego z wierzchołków trójkąta. Bufor indeksów zawiera indeksy dla bufora wierzchołków. Trójkąt definiują trzy indeksy. Na przykład trójkąt składający się z trzech pierwszych punktów z bufora wierzchołków jest zapisany w buforze indeksów jako „0,1,2”.
W tym prostym przykładzie nie występuje przekształcenie 3D. Mogą być wyświetlane tylko obiekty należące do kanonicznego obszaru wyświetlania (w przestrzeni o objętości 2 x 2 x 1). Współrzędne trójkątów są zdefiniowane tak, aby należały do tej przestrzeni. Podczas renderowania typowej sceny 3D obiekty są jednak przekształcane za pomocą rzutowania perspektywicznego lub ortogonalnego w taki sposób, aby były renderowane w tym obszarze wyświetlania zgodnie z ich położeniem w „rzeczywistym” układzie współrzędnych.
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; public class Context3D_drawTriangles extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_drawTriangles() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes 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 ] ); vertexes = 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 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); //Clear required before first drawTriangles() call renderContext.clear( .3,.3,.3 ); //Draw the 2 triangles renderContext.drawTriangles( indexList, 0, 2 ); //Show the frame renderContext.present(); } } }
drawTrianglesInstanced | () | metoda |
public function drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 20.0 |
Metoda umożliwia renderowanie wystąpień trójkątów z użyciem bieżących buforów i stanu obiektu Context3D.
Wierzchołki każdego trójkąta wystąpienia są przetwarzane przez program modułu cieniującego wierzchołków, a powierzchnia każdego trójkąta — przez program modułu cieniującego pikseli. Kolor wyjściowy z programu pikseli dla każdego piksela jest rysowany w miejscu docelowym renderowania zgodnie z operacjami na szablonach, testem głębi, źródłową i docelową wartością alfa oraz bieżącym trybem mieszania. Celem renderowania może być główny bufor renderowania lub tekstura.
Jeśli jest aktywny tryb wyłączania (w przypadku użycia metody setCulling()
), trójkąty mogą być odrzucane ze sceny przed uruchomieniem programu pikseli. Jeśli jest aktywny tryb testowania szablonów i głębi, piksele generowane przez program pikseli mogą być odrzucane bez aktualizowania miejsca docelowego renderowania. Również program pikseli może ustalić, że nie należy generować koloru dla piksela.
Renderowane wystąpienia trójkątów nie są wyświetlane w widoku, dopóki nie zostanie wywołana metoda present()
. Po każdym wywołaniu metody present()
należy wywołać metodę clear()
, zanim nastąpi pierwsze wywołanie metody drawTrianglesInstanced()
. W przeciwnym razie renderowanie nie powiedzie się.
Jeśli właściwość enableErrorChecking
ma wartość false
, ta funkcja natychmiast kończy działanie bez oczekiwania na wyniki, a wyjątki są generowane tylko w przypadku zwolnienia wystąpienia obiektu Context3D lub zbyt dużej liczby wywołań rysowania. Jeśli stan kontekstu renderowania jest nieprawidłowy, renderowanie kończy się niepowodzeniem bez powiadomienia. Jeśli właściwość enableErrorChecking
ma wartość true
, ta funkcja zwraca wartość po narysowaniu trójkątów, a wyjątki są generowane w przypadku wszystkich błędów rysowania i niewłaściwych stanów kontekstu.
Ta metoda może powodować wyrzucenie wyjątku, jeśli wystąpienie bufora zostanie nieprawidłowo ustawione w sekwencji za pomocą polecenia SetVertexAt()
. Na przykład w przypadku Direct 3D w wersji 9 zaindeksowane dane geometrii oraz liczbę wystąpień do narysowania należy zawsze ustawić w strumieniu zero z interfejsem API SetStreamSourceFreq()
.
Oznacza to, że nie należy umieszczać bufora wierzchołków utworzonego za pomocą polecenia CreateVertexBufferForInstance()
z minimalnym numerem indeksowym w połączeniu z poleceniem SetVertexBufferAt()
jako parametrem wejściowym programu modułu cieniującego wierzchołków. Bufor wierzchołków wygenerowany za pomocą polecenia CreateVertexBuffer()
należy umieszczać z zastosowaniem mniejszego numeru indeksowego niż w przypadku CreateVertexBufferForInstance()
. Ogólnie mówiąc, dane geometrii należy umieszczać przed danymi dla danego wystąpienia, używając polecenia SetVertexBufferAt()
.
Parametry
indexBuffer:IndexBuffer3D — Zestaw indeksów wierzchołków określających wierzchołki do renderowania.
| |
numInstances:int — Liczba wystąpień do renderowania.
| |
firstIndex:int (default = 0 ) — Indeks pierwszego indeksu wierzchołka wybranego do renderowania. Domyślnie ta wartość wynosi 0.
| |
numTriangles:int (default = -1 ) — Liczba trójkątów do renderowania. Każdy trójkąt wymaga trzech indeksów. Przekazanie wartości –1 powoduje narysowanie wszystkich trójkątów w buforze indeksu. Domyślnie ta wartość wynosi 1.
|
Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
| |
Error — Występuje, jeśli metoda została wywołana zbyt wiele razy między wywołaniami metody present() . Maksymalna liczba wywołań wynosi 32 768.
| |
Error — Wymaga profilu standardowego rozszerzonego lub wyższego: W przypadku wywołania tej metody, gdy żądany profil jest niższy niż standardowy rozszerzony.
| |
Error — Gdy ta metoda jest wywoływana z ujemną wartością numInstances.
Następujące błędy są generowane tylko wtedy, gdy właściwość | |
Error — Trzeba wyczyścić przed rysowaniem: jeśli bufor nie został wyczyszczony od ostatniego wywołania metody present() .
| |
Error — Jeśli nie jest ustawiony prawidłowy obiekt Program3D.
| |
Error — Nie ustawiono prawidłowego bufora indeksów: jeśli nie jest ustawiony obiekt IndexBuffer3D.
| |
Error — Błąd testu sensowności parametrów: gdy liczba trójkątów do narysowania lub wartość firstIndex przekracza dozwolony limit.
| |
RangeError — Zbyt mało indeksów w tym buforze: gdy bufor nie zawiera indeksów w liczbie wystarczającej do zdefiniowania liczby wierzchołków do narysowania.
| |
Error — Próbka powiązana z teksturą powiązaną też z mechanizmem renderowania: gdy celem renderowania jest tekstura i ta tekstura jest przypisana do tekstury wejściowej bieżącego programu fragmentów.
| |
Error — Próbka powiązana z nieprawidłową teksturą: jako parametr wejściowy bieżącego programu fragmentów określono nieprawidłową teksturę.
| |
Error — Format próbnika niezgodny z formatem tekstury: gdy tekstura przypisana jako parametr wejściowy bieżącego programu fragmentów ma inny format niż określony w rejestrze próbnika. Tekstura 2D może na przykład być przypisana do próbnika tekstury sześciennej.
| |
Error — Próbka powiązana z niezdefiniowaną teksturą: bieżący program fragmentów uzyskuje dostęp do rejestru tekstur, którego nie ustawiono (za pomocą metody setTextureAt() ).
| |
Error — Te same parametry próbnika wymagane przy tej samej teksturze: Jeśli tekstura jest używana dla więcej niż jednego rejestru próbnika, wszystkie próbniki muszą mieć takie same ustawienia. Nie można na przykład ustawić jednego próbnika na ściskanie, a innego na opakowywanie.
| |
Error — Tekstura powiązana, ale nie używana: ustawiono teksturę jako parametr wejściowy modułu cieniującego, ale nie jest ona używana.
| |
Error — Nieużywany strumień: do wejścia atrybutów wierzchołka przypisano bufor wierzchołków, ale program wierzchołków nie odnosi się do powiązanego z buforem rejestru.
| |
Error — Nieprawidłowy strumień: obiekt VertexBuffer3D przypisany do programu wierzchołków nie jest prawidłowym obiektem.
| |
RangeError — Za mało wierzchołków w strumieniu: bufor wierzchołków dostarczający dane do rysowania określonych trójkątów zawiera zbyt mało danych.
| |
RangeError — Przesunięcie wierzchołka w strumieniu poza zakresem: przesunięcie określone w wywołaniu metody setVertexBufferAt() jest ujemne lub wykracza poza koniec bufora.
| |
Error — Strumień odczytywany, ale nie ustawiony: atrybut wierzchołka używany przez bieżący program wierzchołków nie został ustawiony (za pomocą metody setVertexBufferAt() ).
| |
Error — Strumień bufora wierzchołków nie zawiera wystarczająco wiele elementów na potrzeby wystąpień: Gdy strumień bufora wierzchołków nie zawiera wystarczająco wiele elementów względem liczby wystąpień.
| |
Error — Strumień bufora wierzchołków dla wystąpień jest ustawiony nieprawidłowo z zastosowaniem rejestru minimalnych atrybutów indeksu: jeśli bufor wierzchołków wygenerowany przy użyciu polecenia CreateVertexBuffer() otrzyma większy numer indeksowy niż bufor wierzchołków wygenerowany przy użyciu polecenia CreateVertexBufferForInstance() .
|
Powiązane elementy interfejsu API
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Przykład ( Sposób korzystania z tego przykładu )
package { import com.adobe.utils.v3.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DTriangleFace; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.geom.Matrix3D; import flash.utils.ByteArray; public class Context3D_HelloInstancedDrawing extends Sprite { private var W:int; private var H:int; private var renderContext:Context3D; private var program:Program3D; private var vertexBuffer:VertexBuffer3D; private var instanceBufferColor:VertexBuffer3D; private var instanceBufferTranslation:VertexBuffer3D; private var indexBuffer:IndexBuffer3D; private var m:Matrix3D; private var vertexShader:ByteArray; private var fragmentShader:ByteArray; public function Context3D_HelloInstancedDrawing() { if (hasEventListener(Event.ADDED_TO_STAGE)) removeEventListener(Event.ADDED_TO_STAGE, init); W = stage.stageWidth; H = stage.stageHeight; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, contextCreated); //We need to request context3D in standard extended profile as instanced drawing requires standard extended profile. stage.stage3Ds[0].requestContext3D("auto","standardExtended"); } //Note: <code>context3DCreate</code> event can happen at any time. For example, when the hardware resources are taken up by another process. private function contextCreated( event:Event ):void { var t:Stage3D = event.target as Stage3D; renderContext = t.context3D; trace( "3D driver: " + renderContext.driverInfo ); setupScene(); } private function setupScene():void { renderContext.enableErrorChecking = true; renderContext.configureBackBuffer( W, H, 2, false ); renderContext.setCulling( Context3DTriangleFace.BACK ); //create vertex buffer for geometry information of the instances (same geometry of the instances) vertexBuffer = renderContext.createVertexBuffer(3, 3); //The color and translation information varies across the instances. Use <code>createVertexBufferForInstances</code> for color and translation information. //the intancesPerElement parameter used is 1 which means that each instance will use unique element of the instances buffer //if the intancesPerElement is 3 then sets of 3 instances will use the same element of the instances buffer instanceBufferColor = renderContext.createVertexBufferForInstances(4,3,1); instanceBufferTranslation = renderContext.createVertexBufferForInstances(4,3,1); //create index buffer for the triangle indexBuffer = renderContext.createIndexBuffer(3); //create and compile program program = renderContext.createProgram(); var assembler:AGALMiniAssembler = new AGALMiniAssembler(); // VERTEX SHADER var code:String = ""; //The vertex shader code runs for every vertex of each instance. //The vertex buffers uploaded for instance data (va1,va2) are used when the vertex shader for that particular instance is being executed. code += "add vt0, va0, va2\n"; code += "mov op, vt0\n"; code += "mov v0, va1\n"; vertexShader = assembler.assemble(Context3DProgramType.VERTEX, code); //FRAGMENT SHADER code = "mov oc, v0\n"; // Compile the agal code into bytecode using agalminiassembler fragmentShader = assembler.assemble(Context3DProgramType.FRAGMENT, code); //upload program to gpu program.upload(vertexShader, fragmentShader); //geometry data for the instances var vertexData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0, // - 1st vertex x,y,z 0, 0.3, 1, // - 2nd vertex x,y,z 0.3, -0.3, 0 // - 3rd vertex x,y,z ]); //per instance color data var instanceColorData:Vector.<Number>=Vector.<Number>([ 1.0, 0.0, 0.0, // - 1st instance r,g,b 0.0, 1.0, 0.0, // - 2nd instance r,g,b 1.0, 1.0, 1.0, // - 3rd instance r,g,b 0.7, 0.0, 1.0 // - 4th instance r,g,b ]); //per instance translation data var instanceTranslationData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0.0, // - 1st instance x,y,z 0.3, 0.3, 0.0, // - 2nd instance x,y,z -0.3, 0.3, 0.0, // - 3rd instance x,y,z 0.3, -0.3, 0.0 // - 4th instance x,y,z ]); vertexBuffer.uploadFromVector(vertexData, 0, 3); instanceBufferColor.uploadFromVector(instanceColorData, 0, 4); indexBuffer.uploadFromVector(Vector.<uint>([0, 1, 2]), 0, 3); instanceBufferTranslation.uploadFromVector(instanceTranslationData, 0, 4); //pass data to program renderContext.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(1, instanceBufferColor, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(2, instanceBufferTranslation, 0, Context3DVertexBufferFormat.FLOAT_3); //set active program renderContext.setProgram(program); renderContext.enableErrorChecking = true; addEventListener(Event.ENTER_FRAME, render); } private function render( event:Event ):void { renderContext.clear(0.3, 0.2, 1, 1); // Clear the backbuffer by filling it with the given color //Draw three instances of the same geometry but with varying instance data specified using <code>vertexBufferForInstances</code>. renderContext.drawTrianglesInstanced(indexBuffer,4); renderContext.present(); // render the backbuffer on screen. } } }
package { import com.adobe.utils.v3.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DTriangleFace; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.geom.Matrix3D; import flash.utils.ByteArray; public class Context3D_HelloInstanceIdRegister extends Sprite { private var W:int; private var H:int; private var renderContext:Context3D; private var program:Program3D; private var vertexBuffer:VertexBuffer3D; private var instanceBufferColor:VertexBuffer3D; private var instanceBufferTranslation:VertexBuffer3D; private var indexBuffer:IndexBuffer3D; private var m:Matrix3D; private var vertexShader:ByteArray; private var fragmentShader:ByteArray; public function Context3D_HelloInstanceIdRegister() { if (hasEventListener(Event.ADDED_TO_STAGE)) removeEventListener(Event.ADDED_TO_STAGE, init); W = stage.stageWidth; H = stage.stageHeight; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, contextCreated); //We need to request context3D in standard extended profile as instanced drawing requires standard extended profile. stage.stage3Ds[0].requestContext3D("auto","standardExtended"); } //Note: <code>context3DCreate</code> event can happen at any time. For example, when the hardware resources are taken up by another process. private function contextCreated( event:Event ):void { var t:Stage3D = event.target as Stage3D; renderContext = t.context3D; trace( "3D driver: " + renderContext.driverInfo ); setupScene(); } private function setupScene():void { renderContext.enableErrorChecking = true; renderContext.configureBackBuffer( W, H, 2, false ); renderContext.setCulling( Context3DTriangleFace.BACK ); //create vertex buffer for geometry information of the instances (same geometry of the instances) vertexBuffer = renderContext.createVertexBuffer(3, 3); //The color and translation information varies across the instances. Use <code>createVertexBufferForInstances</code> for color and translation information. //the intancesPerElement parameter used is 1 which means that each instance will use unique element of the instances buffer //if the intancesPerElement is 3 then sets of 3 instances will use the same element of the instances buffer instanceBufferColor = renderContext.createVertexBufferForInstances(4,3,1); instanceBufferTranslation = renderContext.createVertexBufferForInstances(4,3,1); //create index buffer for the triangle indexBuffer = renderContext.createIndexBuffer(3); //create and compile program program = renderContext.createProgram(); //Note : for instance id support , use the latest AgalMiniAssembler from github - https://github.com/adobe-flash/graphicscorelib/blob/master/src/com/adobe/utils/v3/AGALMiniAssembler.as var assembler:AGALMiniAssembler = new AGALMiniAssembler(); // VERTEX SHADER var code:String = ""; //the vertex shader code will run for every vertex of every instance , //the vertex buffers uploaded for instance data (va1,va2) will be used when vertex shader for that particular instance is being executed //the vertex shader code below indexes the program constants matrix using iid.x. iid is a new register introduced in vertex shader for instanced drawing //it is a read only register , iid.x gives the current instance id whose shader is being executed code += "add vt0, va0, va2\n"; code += "mul vt1, vt0, vc[iid.x]\n" code += "mov op, vt1\n"; code += "mov v0, va1\n"; vertexShader = assembler.assemble(Context3DProgramType.VERTEX, code, 3); //FRAGMENT SHADER code = "mov oc, v0\n"; // Compile the agal code into bytecode using agalminiassembler fragmentShader = assembler.assemble(Context3DProgramType.FRAGMENT, code, 3); //upload program to gpu program.upload(vertexShader, fragmentShader); //geometry data for the instances var vertexData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0, // - 1st vertex x,y,z 0, 0.3, 1, // - 2nd vertex x,y,z 0.3, -0.3, 0 // - 3rd vertex x,y,z ]); //per instance color data var instanceColorData:Vector.<Number>=Vector.<Number>([ 1.0, 0.0, 0.0, // - 1st instance r,g,b 0.0, 1.0, 0.0, // - 2nd instance r,g,b 1.0, 1.0, 1.0, // - 3rd instance r,g,b 0.7, 0.0, 1.0 // - 4th instance r,g,b ]); //per instance translation data var instanceTranslationData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0.0, // - 1st instance x,y,z 0.3, 0.3, 0.0, // - 2nd instance x,y,z -0.3, 0.3, 0.0, // - 3rd instance x,y,z 0.3, -0.3, 0.0 // - 4th instance x,y,z ]); vertexBuffer.uploadFromVector(vertexData, 0, 3); instanceBufferColor.uploadFromVector(instanceColorData, 0, 4); indexBuffer.uploadFromVector(Vector.<uint>([0, 1, 2]), 0, 3); instanceBufferTranslation.uploadFromVector(instanceTranslationData, 0, 4); //pass data to program renderContext.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(1, instanceBufferColor, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(2, instanceBufferTranslation, 0, Context3DVertexBufferFormat.FLOAT_3); //set active program renderContext.setProgram(program); renderContext.enableErrorChecking = true; addEventListener(Event.ENTER_FRAME, render); } private function render( event:Event ):void { renderContext.clear(0.3, 0.2, 1, 1); // Clear the backbuffer by filling it with the given color var instanceScalingData:Vector.<Number>=Vector.<Number>([ 1.0, 1.0, 1.0, 1.0, // - 1st instance x,y,z,w 1.4, 1.4, 1.4, 1.0, // - 2nd instance x,y,z,w 0.6, 0.6, 0.6, 1.0, // - 3rd instance x,y,z,w 0.6, 0.6, 0.6, 1.0 ]); var m:Matrix3D = new Matrix3D(); m.copyRawDataFrom(instanceScalingData); renderContext.setProgramConstantsFromMatrix("vertex",0,m,false); //Draw three instances of the same geometry but with varying instance data specified using <code>vertexBufferForInstances</code>. renderContext.drawTrianglesInstanced(indexBuffer,4); renderContext.present(); // render the backbuffer on screen. } } }
present | () | metoda |
public function present():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Wyświetla tylny bufor renderowania.
Wywołanie metody present()
powoduje wyświetlenie efektów wszystkich operacji renderowania wykonanych od poprzedniego wywołania metody present()
i powoduje rozpoczęcie nowego cyklu renderowania. Po wywołaniu metody present
należy wywołać metodę clear()
przed kolejnymi wywołaniami metody drawTriangles()
. W przeciwnym przypadku ta funkcja wyczyści bufor renderowania przez ustawienie koloru żółtego lub zielonego (na zmianę) lub — jeśli właściwość enableErrorChecking
będzie ustawiona na wartość true
— zostanie wygenerowany wyjątek.
Wywołanie metody present()
powoduje także wyzerowanie celu renderowania — analogicznie do wywołania metody setRenderToBackBuffer()
.
Zgłasza
Error — Trzeba wyczyścić przed rysowaniem: jeśli metoda clear() nie została wywołana od ostatniego wywołania mtody present() . (Nie można wywołać metody present() dwa razy z rzędu bez wywołania metody clear() pomiędzy tymi wywołaniami).
| |
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.
|
setBlendFactors | () | metoda |
public function setBlendFactors(sourceFactor:String, destinationFactor:String):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Określa współczynniki użyte do mieszania koloru wyjściowego operacji rysowania z istniejącym kolorem.
Kolor wyjściowy (źródłowy) programu modułu cieniującego pikseli jest łączony z istniejącym (docelowym) kolorem w tym pikselu zgodnie z następującym wzorem:
kolor wynikowy = (source color * sourceFactor) + (destination color * destinationFactor)
Kolor docelowy to bieżący kolor w buforze renderowania dla tego piksela. Jest to zatem wynik ostatniego wywołania metody clear()
oraz każdego pośredniego wywołania metody drawTriangles()
.
Za pomocą metody setBlendFactors()
można ustawić współczynniki używane do mnożenia kolorów źródłowego i docelowego, zanim zostaną one do siebie dodane. Domyślne współczynniki mieszania to sourceFactor = Context3DBlendFactor.ONE
oraz destinationFactor = Context3DBlendFactor.ZERO
, co powoduje zastąpienie koloru docelowego kolorem źródłowym (innymi słowy, nie następuje mieszanie tych dwóch kolorów). W przypadku normalnego mieszania alfa należy użyć współczynników sourceFactor = Context3DBlendFactor.SOURCE_ALPHA
oraz destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA
.
Aby ustawić parametry tej funkcji, należy zastosować stałe zdefiniowane w klasie Context3DBlendFactor.
Parametry
sourceFactor:String — Współczynnik, przez który należy pomnożyć kolor źródłowy. Wartość domyślna to Context3DBlendFactor.ONE .
| |
destinationFactor:String — Współczynnik, przez który należy pomnożyć kolor docelowy. Wartość domyślna to Context3DBlendFactor.ZERO .
|
Zgłasza
Error — Nieprawidłowe wyliczenie: gdy wartość parametru sourceFactor lub destinationFactor nie jest jedną z rozpoznawanych wartości zdefiniowanych w klasie Context3DBlendFactor.
|
Powiązane elementy interfejsu API
Przykład ( Sposób korzystania z tego przykładu )
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DBlendFactor; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.ErrorEvent; import flash.events.Event; import flash.events.KeyboardEvent; import flash.ui.Keyboard; public class Context3D_setBlendMode extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; private var sourceFactor:int = 6; private var destinationFactor:int = 4; private var blendFactors:Array = [Context3DBlendFactor.DESTINATION_ALPHA, Context3DBlendFactor.DESTINATION_COLOR, Context3DBlendFactor.ONE, Context3DBlendFactor.ONE_MINUS_DESTINATION_ALPHA, Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA, Context3DBlendFactor.ONE_MINUS_SOURCE_COLOR, Context3DBlendFactor.SOURCE_ALPHA, Context3DBlendFactor.SOURCE_COLOR, Context3DBlendFactor.ZERO]; public function Context3D_setBlendMode() { this.stage.addEventListener( KeyboardEvent.KEY_DOWN, keyHandler ); stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.addEventListener( ErrorEvent.ERROR, contextError ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 3 , 2, 0, 1, 3, 6, 4, 5, 5, 7, 6, 10, 8, 9, 9, 11, 10, 12, 15, 14, 12, 13, 15, 16, 17, 19, 16, 19, 18 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 7; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b, a format -1, 1, 0, 1, 1, 1, .5, 0, 1, 0, 1, 1, 1, .5, -1, 0, 0, 1, 1, 1, .5, 0, 0, 0, 1, 1, 1, .5, 0, 1, 0, .8,.8,.8, .6, 1, 1, 0, .8,.8,.8, .6, 0, 0, 0, .8,.8,.8, .6, 1, 0, 0, .8,.8,.8, .6, -1, 0, 0, 1, 0, 0, .5, 0, 0, 0, 0, 1, 0, .5, -1,-1, 0, 0, 0, 1, .5, 0,-1, 0, 1, 0, 1, .5, 0, 0, 0, 0, 0, 0, .5, 1, 0, 0, 0, 0, 0, .5, 0,-1, 0, 0, 0, 0, .5, 1,-1, 0, 0, 0, 0, .5, -.8,.8, 0, .6,.4,.2,.4, .8,.8, 0, .6,.4,.2,.4, -.8,-.8, 0, .6,.4,.2,.4, .8,-.8, 0, .6,.4,.2,.4 ] ); vertexes = 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 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_4 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); render(); } private function render():void { //Clear required before first drawTriangles() call renderContext.clear( 1, 1, 1, 1 ); //Draw the back triangles renderContext.setBlendFactors( Context3DBlendFactor.ONE, Context3DBlendFactor.ZERO ); //No blending renderContext.drawTriangles( indexList, 0, 8 ); //Set blend renderContext.setBlendFactors( blendFactors[sourceFactor], blendFactors[destinationFactor] ); //Draw the front triangles renderContext.drawTriangles( indexList, 24, 2 ); //Show the frame renderContext.present(); } private function contextError( error:ErrorEvent ):void { trace( error.errorID + ": " + error.text ); } private function keyHandler( event:KeyboardEvent ):void { switch ( event.keyCode ) { case Keyboard.NUMBER_1: if( --sourceFactor < 0 ) sourceFactor = blendFactors.length - 1; break; case Keyboard.NUMBER_2: if( ++sourceFactor > blendFactors.length - 1) sourceFactor = 0; break; case Keyboard.NUMBER_3: if( --destinationFactor < 0 ) destinationFactor = blendFactors.length - 1; break; case Keyboard.NUMBER_4: if( ++destinationFactor > blendFactors.length - 1) destinationFactor = 0; break; } trace( "Source blend factor: " + blendFactors[sourceFactor] + ", destination blend factor: " + blendFactors[destinationFactor] ); render(); } } }
setColorMask | () | metoda |
public function setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Ustawia maskę używaną podczas zapisywania kolorów w buforze renderowania.
Po zapisaniu koloru w buforze renderowania aktualizowane są tylko te składniki kolorów, dla których parametr odpowiedniej maski koloru ustawiono na wartość true
. Na przykład po wywołaniu setColorMask(true, false, false, false)
do momentu ponownej zmiany maski koloru w buforze zapisywany jest tylko czerwony składnik koloru. Maska koloru nie ma wpływu na działanie metody clear()
.
Parametry
red:Boolean — Aby zablokować zmiany w kanale czerwonym, należy ustawić wartość false .
| |
green:Boolean — Aby zablokować zmiany w kanale zielonym, należy ustawić wartość false .
| |
blue:Boolean — Aby zablokować zmiany w kanale niebieskim, należy ustawić wartość false .
| |
alpha:Boolean — Aby zablokować zmiany w kanale alfa, należy ustawić wartość false .
|
Przykład ( Sposób korzystania z tego przykładu )
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; public class Context3D_setColorMask extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_setColorMask() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes 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, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,-1, 0, 1, 1, 1, -1,-1, 0, 1, 1, 1 ] ); vertexes = 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 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); renderContext.clear( .3,.3,.3,1 ); renderContext.drawTriangles( indexList, 0, 1 ); //Top triangle draws all colors, so is white renderContext.setColorMask( true, false, false, false ); //Mask all but red channel renderContext.drawTriangles( indexList, 3, 1 ); //Bottom triangle only updates red //Show the frame renderContext.present(); } } }
setCulling | () | metoda |
public function setCulling(triangleFaceToCull:String):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Ustawia tryb wyłączania trójkątów.
Trójkąty mogą zostać wyłączone ze sceny na wczesnym etapie renderowania ze względu na ich orientację względem płaszczyzny widoku. Aby wyłączanie odbywało się poprawnie, kolejność wierzchołków należy określać spójnie (zgodnie z ruchem wskazówek zegara lub przeciwnie do kierunku ruchu wskazówek zegara) w taki sposób, jak są one widoczne z zewnątrz modelu.
Parametry
triangleFaceToCull:String — Tryb wyłączania. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DTriangleFace.
|
Zgłasza
Error — Błąd nieprawidłowego wyliczenia: gdy wartość parametru triangleFaceToCull nie jest jedną z wartości zdefiniowanych w klasie Context3DTriangleFace.
|
Powiązane elementy interfejsu API
setDepthTest | () | metoda |
public function setDepthTest(depthMask:Boolean, passCompareMode:String):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Ustawia typ porównywania używanego do testowania głębi.
Głębia wyjściowego piksela źródłowego z programu modułu cieniującego pikseli jest porównywana z bieżącą wartością w buforze głębi. Gdy porównanie zwraca wartość false
, piksel źródłowy jest odrzucany. Gdy zwraca wartość true
, piksel źródłowy jest przetwarzany w następnym etapie renderowania, czyli w teście szablonu. Dopóki parametr depthMask
ma wartość true
, bufor głębi jest aktualizowany przy użyciu głębi piksela źródłowego.
Powoduje ustawienie testu służącego do porównywania wartości głębi dla pikseli źródłowych i docelowych. Gdy porównanie zwraca wartość true, piksel źródłowy jest łączony z pikselem docelowym. Operator porównawczy jest stosowany jako operator wewnętrzny między wartościami piksela źródłowego i docelowego, w takiej kolejności.
Parametry
depthMask:Boolean — W przypadku wartości true wartość głębi docelowej będzie aktualizowana z pikseli źródłowych.
| |
passCompareMode:String — Operacja testu porównywania głębi. Jedna z wartości Context3DCompareMode.
|
Powiązane elementy interfejsu API
setFillMode | () | metoda |
public function setFillMode(fillMode:String):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 16 |
Pozwala ustawić tryb wypełniania przy renderowaniu. Interfejs jest dostępny tylko na komputerze z zainstalowanym środowiskiem AIR.
Parametry
fillMode:String — W przypadku wartości WIREFRAME obiekt będzie wyświetlany na siatce linii. W przypadku wartości SOLID obiekt będzie wyświetlany na cieniowanej siatce wielokątowej.
|
Powiązane elementy interfejsu API
setProgram | () | metoda |
public function setProgram(program:Program3D):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Konfiguruje programy modułów cieniujących wierzchołków i fragmentów do użytku w dalszym renderowaniu.
Parametry
program:Program3D — Obiekt Program3D reprezentujący programy wierzchołków i fragmentów do używania.
|
Powiązane elementy interfejsu API
Przykład ( Sposób korzystania z tego przykładu )
renderContext
jest wystąpieniem klasy Context3D. Programy w tym przykładzie są napisane w języku AGAL (Adobe Graphics Assembly Language).
//A simple vertex program in AGAL const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + "mov v0, va1"; //A simple fragment (or pixel) program in AGAL const FRAGMENT_SHADER:String = "mov oc, v0"; var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var programPair:Program3D; //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair );
setProgramConstantsFromByteArray | () | metoda |
public function setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.1, AIR 3.1 |
Ustawia stałe do użytku w programach modułów cieniujących, korzystając z wartości przechowywanych w obiekcie ByteArray
.
Ustawia stałe dostępne za pomocą programu wierzchołków lub fragmentów.
Parametry
programType:String — Jeden z trybów klasy Context3DProgramType.
| |
firstRegister:int — Indeks pierwszej stałej programu modułu cieniującego do ustawienia.
| |
numRegisters:int — Liczba rejestrów do ustawienia. Każdy rejestr jest odczytywany jako cztery wartości zmiennoprzecinkowe.
| |
data:ByteArray — Źródłowy obiekt ByteArray.
| |
byteArrayOffset:uint — Przesunięcie odczytu z obiektu ByteArray.
|
Zgłasza
TypeError — Wartość kNullPointerError, gdy parametr data ma wartość null.
| |
RangeError — Wartość kConstantRegisterOutOfBounds w przypadku próby ustawienia stałych modułu cieniującego w liczbie większej niż maksymalna.
| |
RangeError — Wartość kBadInputSizem, jeśli parametr byteArrayOffset jest nie mniejszy niż długość tablicy data lub liczba elementów w tablicy data – byteArrayOffset to mniej niż numRegisters * 16.
|
Powiązane elementy interfejsu API
setProgramConstantsFromMatrix | () | metoda |
public function setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Ustawia stałe do użytku w programach modułów cieniujących, korzystając z wartości przechowywanych w obiekcie Matrix3D
.
Ta funkcja pozwala przekazać macierz do programu modułu cieniującego. Ta funkcja ustawia 4 rejestry stałych używane przez program wierzchołków lub fragmentów. Macierz jest przypisywana do rejestrów wiersz po wierszu. Pierwszy rejestr stałych jest przypisywany do górnego wiersza macierzy. Można ustawić 128 rejestrów dla programu wierzchołków i 28 dla programu fragmentów.
Parametry
programType:String — Typ programu modułu cieniującego — albo Context3DProgramType.VERTEX , albo Context3DProgramType.FRAGMENT .
| |
firstRegister:int — Indeks pierwszego rejestru stałych do ustawienia. Obiekt Matrix3D ma 16 wartości, co oznacza, że są ustawione 4 rejestry.
| |
matrix:Matrix3D — Macierz zawierająca wartości stałych.
| |
transposedMatrix:Boolean (default = false ) — W przypadku wartości true wpisy w macierzy są kopiowane do rejestrów w kolejności transponowanej. Wartością domyślną jest false .
|
Zgłasza
TypeError — Błąd pustego wskaźnika: gdy właściwość matrix ma wartość null.
| |
RangeError — Rejestr stałych poza zakresem: przy próbie ustawienia większej liczby rejestrów stałych modułów cieniujących niż liczba maksymalna.
|
Więcej informacji
Powiązane elementy interfejsu API
setProgramConstantsFromVector | () | metoda |
public function setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Ustawia stałe parametry wejściowe dla programów modułów cieniujących.
Ustawia tablicę stałych dostępnych za pomocą programu modułu cieniującego wierzchołków lub fragmentów. Stałe ustawione w obiekcie Program3D są dostępne w programach modułu cieniującego jako rejestry stałych. Każdy rejestr stałych składa się z 4 wartości zmiennoprzecinkowych (x, y, z, w). Każdy rejestr wymaga więc 4 wpisów w wektorze danych. Liczba rejestrów możliwych do ustawienia dla programu wierzchołków i programu fragmentów zależy od wartości Context3DProfile
.
Parametry
programType:String — Typ programu modułu cieniującego — albo Context3DProgramType.VERTEX , albo Context3DProgramType.FRAGMENT .
| |
firstRegister:int — Indeks pierwszego rejestru stałych do ustawienia.
| |
data:Vector.<Number> — Wartości stałych zmiennoprzecinkowych. Liczba elementów w parametrze data musi wynosić co najmniej numRegisters (4 elementy).
| |
numRegisters:int (default = -1 ) — Liczba stałych do ustawienia. Określenie wartości –1 (domyślnej) powoduje ustawienie liczby rejestrów wystarczającej do użycia wszystkich dostępnych danych.
|
Zgłasza
TypeError — Błąd pustego wskaźnika: gdy właściwość data ma wartość null .
| |
RangeError — Rejestr stałych poza zakresem: przy próbie ustawienia większej liczby rejestrów stałych modułów cieniujących niż liczba maksymalna.
| |
RangeError — Nieprawidłowy rozmiar danych wejściowych: Gdy liczba elementów w tablicy data jest mniejsza niż numRegisters * 4.
|
Więcej informacji
Powiązane elementy interfejsu API
setRenderToBackBuffer | () | metoda |
public function setRenderToBackBuffer():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Ustawia tylny bufor renderowania jako cel renderowania. Kolejne wywołania metod drawTriangles()
i clear()
skutkują modyfikacjami bufora tylnego. Korzystając z tej metody, można wznowić normalne renderowanie po użyciu metody setRenderToTexture()
.
setRenderToTexture | () | metoda |
public function setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Ustawia określoną teksturę jako cel renderowania.
Kolejne wywołania metod drawTriangles()
i clear()
modyfikują określoną teksturę, a nie bufor tylny. Mipmapy są tworzone automatycznie. Metoda setRenderToBackBuffer()
pozwala wznowić normalne renderowanie do bufora tylnego.
Nie trzeba wykonywać czyszczenia przed rysowaniem. W przypadku braku operacji czyszczenia jest zachowywany kontener renderowania. Nie są też czyszczone bufor głębokości ani bufor wzornika. Czyszczenie jest wymuszane przy pierwszym rysowaniu. Wywołanie metody present()
przywraca bufor tylny jako cel renderowania.
Parametry
texture:flash.display3D.textures:TextureBase — Docelowa tekstura do renderowania. Ustawienie null pozwala wznowić renderowanie do bufora tylnego. (Metody setRenderToBackBuffer() i present również przywracają bufor tylny jako cel renderowania).
| |
enableDepthAndStencil:Boolean (default = false ) — W przypadku wartości true jest dostępne testowanie głębi i szablonów. W przypadku wartości false wszystkie stany głębi i szablonów są ignorowane przy kolejnych operacjach rysowania.
| |
antiAlias:int (default = 0 ) — Jakość wygładzania. Wartość 0 powoduje wyłączenie wygładzania. Wyższe wartości oferują lepszą jakość wygładzania, ale wymagają dodatkowych obliczeń. Ta wartość jest obecnie ignorowana przez platformę przenośną i w kontekście renderowania oprogramowania.
| |
surfaceSelector:int (default = 0 ) — Określa, który element tekstury ma zostać zmodyfikowany. Obiekty Texture mają jedną powierzchnię, dlatego należy dla nich podać wartość 0 (domyślną). Obiekty CubeTexture mają sześć powierzchni. Można dla nich podać jako wartość liczbę całkowitą od 0 do 5.
| |
colorOutputIndex:int (default = 0 ) — Rejestr koloru wyjściowego. Musi mieć wartość 0 w przypadku trybu ograniczonego lub trybu bazowego. W przeciwnym razie określa rejestr koloru wyjściowego.
|
Zgłasza
ArgumentError — W przypadku niezgodnego parametru surfaceSelector . Musi mieć wartość 0 dla tekstur 2D i od 0 do 5 dla map sześciennych.
| |
ArgumentError — Wartość texture nie jest uzyskiwana z klasy TextureBase (klasy Texture lub CubeTexture).
| |
ArgumentError — Wartość colorOutputIndex musi być liczbą całkowitą od 0 do 3.
| |
ArgumentError — To wywołanie wymaga obiektu Context3D utworzonego co najmniej z profilem standardowym.
|
Powiązane elementy interfejsu API
setSamplerStateAt | () | metoda |
public function setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.6, AIR 3.6 |
Ręcznie przesłania stan próbnika tekstury.
Stan próbkowania tekstury jest zazwyczaj ustawiany przy wywołaniu metody setProgram
. Za pomocą tej funkcji można przesłonić stan próbnika tekstury. Jeśli program nie ma zmieniać stanu próbnika, ustaw bit ignoresamnpler
translatora AGAL i użyj tej funkcji.
Parametry
sampler:int — Rejestr próbnika, który ma być używany. Odwzorowuje na rejestr próbnika translatora AGAL.
| |
wrap:String — Tryb opakowania. Zdefiniowany w zmiennej Context3DWrapMode . Wartość domyślna to repeat (powtarzanie).
| |
filter:String — Tryb filtrowania tekstury. Zdefiniowany w zmiennej Context3DTextureFilter . Wartość domyślna to nearest (najbliższe).
| |
mipfilter:String — Filtr mipmapy. Zdefiniowany w zmiennej Context3DMipFilter . Wartość domyślna to none (brak).
|
Zgłasza
Error — Próbnik poza zakresem.
| |
Error — Opakowywanie, filtrowanie, niepoprawne wyliczenie filtra mipmap.
| |
Error — Obiekt zwolniony: Jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
|
Powiązane elementy interfejsu API
setScissorRectangle | () | metoda |
public function setScissorRectangle(rectangle:Rectangle):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Ustawia prostokąt nożyczek. Jest to typ maski rysowania. Mechanizm renderujący rysuje tylko w obszarze wewnątrz prostokąta nożyczek. Stosowanie nożyczek nie wpływa na operacje czyszczenia.
Przekazanie wartości null
powoduje wyłączenie nożyczek.
Parametry
rectangle:Rectangle — Prostokąt, w którym ma się odbywać rysowanie. Określa położenie prostokąta i jego wymiary w pikselach. Początek układu współrzędnych znajduje się w lewym górnym rogu widoku. Wartości dodatnie oznaczają przesunięcie odpowiednio w dół i w prawo (tak samo jak w normalnym układzie współrzędnych programu Flash).
|
Przykład ( Sposób korzystania z tego przykładu )
Do definiowania trójkątów służą bufor wierzchołków i bufor indeksów. Bufor wierzchołków zawiera informacje o położeniu i kolorze każdego z wierzchołków trójkąta. Bufor indeksów zawiera indeksy dla bufora wierzchołków. Trójkąt definiują trzy indeksy. Na przykład trójkąt składający się z trzech pierwszych punktów z bufora wierzchołków jest zapisany w buforze indeksów jako „0,1,2”.
W tym prostym przykładzie nie występuje przekształcenie 3D. Wyświetlane są tylko obiekty leżące wewnątrz kanonicznego obszaru wyświetlania (sześcian o boku 2 x 2 x 2 wyśrodkowany względem początku układu współrzędnych). Podczas renderowania typowej sceny 3D obiekty są jednak przekształcane za pomocą rzutowania perspektywicznego lub ortogonalnego w taki sposób, aby były renderowane w tym obszarze wyświetlania.
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DBlendFactor; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.TimerEvent; import flash.geom.Rectangle; import flash.ui.Keyboard; import flash.utils.Timer; public class Context3D_ScissorRectangle extends Sprite { public const viewWidth:Number = 640; public const viewHeight:Number = 480; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; private var scissorOn:Boolean = false; private var toggler:Timer = new Timer( 750 ); public function Context3D_ScissorRectangle() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); //Set up timer to turn scissoring on and off toggler.addEventListener( TimerEvent.TIMER, toggleScissor ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 3 , 2, 0, 1, 3 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b, a format -1, 1, 0, 1,0,0, 1, 1, 0, 0,0,1, -1,-1, 0, 0,1,0, 1,-1, 0, 1,0,1 ] ); vertexes = 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 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); render(); toggler.start(); } private function render():void { //Clear required before first drawTriangles() call renderContext.clear(); //Sciss a region excluding the outer 100 pixels of the viewport var scissor:Rectangle = new Rectangle( 100, 100, viewWidth - 200, viewHeight - 200 ); if( scissorOn ) renderContext.setScissorRectangle( scissor ); //on else renderContext.setScissorRectangle( null ); //off //Draw the triangles renderContext.drawTriangles( indexList, 0, 2 ); //Show the frame renderContext.present(); } private function toggleScissor( event:Event ):void { scissorOn = !scissorOn; render(); } } }
setStencilActions | () | metoda |
public function setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Ustawia tryb i operację szablonu.
Z każdym wywołaniem rysowania można powiązać 8-bitową wartość odniesienia. Podczas renderowania wartość odniesienia można przetestować względem wartości przechowywanych wcześniej w buforze ramki. Wynik tego testu może kontrolować czynność rysowania i to, czy zostanie zaktualizowana przechowywana wartość szablonu. Ponadto test głębi kontroluje to, czy jest wykonywane testowanie szablonu. Nieudanego testu głębokości można używać do kontrolowania czynności wykonywanej względem bufora szablonu.
Testowanie głębi jest wykonywane jako pierwsze w procesie przetwarzania pikseli. W razie niepowodzenia testu głębi można wykonać czynność aktualizowania bufora szablonu, ale nie można przeprowadzić dalszego badania wartości bufora szablonu. W razie powodzenia testu głębi jest wykonywany test szablonu. W zależności od wyniku testu szablonu można wykonać inne operacje.
Do ustawiania wartości odniesienia szablonu służy metoda setStencilReferenceValue()
.
Parametry
triangleFace:String (default = "frontAndBack ") — Orientacje trójkątów pozwalające na wkład w operacje na szablonach. Jeden z trybów klasy Context3DTriangleFace.
| |
compareMode:String (default = "always ") — Operator testu używany do porównywania bieżącej wartości szablonu odniesienia i docelowej wartości szablonu piksela. Gdy porównanie da wartość true, zostaną zaktualizowane kolor i głębia piksela docelowego. Operacje szablonów są wykonywane zgodnie z żądaniami w poniższych parametrach operacji. Operator porównania jest stosowany jako operator wewnętrzny między bieżącymi i docelowymi wartościami odniesienia, w tej kolejności (w pseudokodzie: jeśli odniesienie_do_szablonu OPERATOR bufor_szablonu, to porównanie udane ). Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DCompareMode.
| |
actionOnBothPass:String (default = "keep ") — Operacja do wykonania, gdy porównania zarówno głębi, jak i szablonu są udane. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DStencilAction.
| |
actionOnDepthFail:String (default = "keep ") — Operacja do wykonania w przypadku nieudanego porównania głębi. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DStencilAction.
| |
actionOnDepthPassStencilFail:String (default = "keep ") — Operacja do wykonania w przypadku udanego porównania głębi i nieudanego porównania szablonu. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DStencilAction.
|
Zgłasza
Error — Błąd nieprawidłowego wyliczenia: gdy wartość parametru triangleFace nie jest jedną z wartości zdefiniowanych w klasie Context3DTriangleFace.
| |
Error — Błąd nieprawidłowego wyliczenia: gdy wartość parametru compareMode nie jest jedną z wartości zdefiniowanych w klasie Context3DCompareMode.
| |
Error — Błąd nieprawidłowego wyliczenia: gdy wartość parametru actionOnBothPass , actionOnDepthFail lub actionOnDepthPassStencilFail nie jest jedną z wartości zdefiniowanych w klasie Context3DStencilAction.
|
Powiązane elementy interfejsu API
Przykład ( Sposób korzystania z tego przykładu )
- Bufor szablonu jest czyszczony przy użyciu wartości 0.
- Jest ustawiane zwiększanie numeru operacji szablonu przy pomyślnym teście szablonu.
- Wartość odniesienia szablonu jest ustawiana na 0.
- Jest rysowana maska trójkątna. Test szablonu ma wynik pomyślny wszędzie tam, gdzie jest narysowany trójkąt, gdyż bufor szablonu wyczyszczono przy użyciu wartości 0, a wartością odniesienia jest 0. W wyniku tego wartość bufora szablonu jest zwiększana do 1 tam, gdzie jest narysowana maska trójkątna.
- Operacja szablonu jest zmieniana na zachowywanie wartości, tak aby dalsze operacje rysowania nie zmieniły bufora szablonu.
- Jest rysowany (wielokolorowy) prostokąt obejmujący cały ekran. Wartość odniesienia szablonu nadal wynosi 0, dlatego test szablonu kończy się niepowodzeniem w zamaskowanym obszarze. Z tego powodu prostokąt jest rysowany wszędzie poza zamaskowanym obszarem.
- Wartość odniesienia szablonu jest zmieniana na 1.
- Jest rysowany kolejny prostokąt obejmujący cały ekran (w kolorze czerwonym). Teraz test szablonu kończy się niepowodzeniem wszędzie poza zamaskowanym obszarem, na którym wartości zostały zwiększone do 1. Prostokąt jest więc rysowany tylko w zamaskowanym obszarze.
Aby wyświetlić kolejne kroki, wskaż przykład myszą.
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DBlendFactor; import flash.display3D.Context3DCompareMode; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DStencilAction; import flash.display3D.Context3DTriangleFace; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.geom.Rectangle; import flash.text.TextField; import flash.text.TextFormat; import flash.ui.Keyboard; import flash.utils.Timer; public class Context3D_Stencil extends Sprite { public const viewWidth:Number = 350; public const viewHeight:Number = 240; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_Stencil() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); non3DSetup(); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, true ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 3, 2, 0, 1, 3, 4, 7, 6, 4, 5, 7, 8, 9, 10 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ //x, y, z r,g,b format -1, 1, 0, 1,0,0, 1, 1, 0, 0,0,1, -1,-1, 0, 0,1,0, 1,-1, 0, 1,0,1, -1, 1, 0, .5,0,0, 1, 1, 0, .5,0,0, -1,-1, 0, .5,0,0, 1,-1, 0, .5,0,0, 0, .7,.1, 0,0,0, -.7,-.7,.1, 0,0,0, .7,-.7,.1, 0,0,0 ]); vertexes = 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 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); render(); } private function render():void { //Clear, setting stencil to 0 renderContext.clear( .3, .3, .3, 1, 1, 0 ); //Draw stencil, incrementing the stencil buffer value renderContext.setStencilReferenceValue( 0 ); renderContext.setStencilActions( Context3DTriangleFace.FRONT_AND_BACK, Context3DCompareMode.EQUAL, Context3DStencilAction.INCREMENT_SATURATE ); if( state > 0 ) renderContext.drawTriangles( indexList, 12, 1 ); //Change stencil action when stencil passes so stencil buffer is not changed renderContext.setStencilActions( Context3DTriangleFace.FRONT_AND_BACK, Context3DCompareMode.EQUAL, Context3DStencilAction.KEEP ); //Draw quad -- doesn't draw where stencil has already drawn if( state > 1 ) renderContext.drawTriangles( indexList, 0, 2 ); //Change the reference to 1 so this quad only draws into stenciled area renderContext.setStencilReferenceValue( 1 ); if( state > 2 ) renderContext.drawTriangles( indexList, 6, 2 ); //Show the frame renderContext.present(); } //The rest of the code is for the example UI and timer private function doState( event:TimerEvent ):void { switch (state) { case 0: description.text = "Draw triangle with stencil action == increment"; state = 1; break; case 1: description.text = "Draw the first plane where stencil == 0"; state = 2; break; case 2: description.text = "Draw second plane where stencil == 1"; state = 3; break; case 3: description.text = "Clear, setting stencil to 0"; state = 0; break; default: description.text = ""; state = 0; } render(); } private var state:int = 3; private var stateTimer:Timer = new Timer( 1250 ); private var description:TextField = new TextField(); private function non3DSetup():void { //Setup timer to animate the stages of drawing the scene stateTimer.addEventListener( TimerEvent.TIMER, doState ); this.stage.addEventListener( MouseEvent.MOUSE_OVER, function(event:Event):void{stateTimer.start()} ); this.stage.addEventListener( MouseEvent.MOUSE_OUT, function(event:Event):void{stateTimer.stop()} ); description.height = 30; description.width = viewWidth; this.addChild( description ); description.y = viewHeight + 15; description.defaultTextFormat = new TextFormat( null, 18, 0xffffff ); description.text = "Mouse over to view."; //Allows mouse-over events var coverSprite:Sprite = new Sprite(); coverSprite.graphics.beginFill( 0, .01 ) coverSprite.graphics.lineTo( stage.stageWidth, 0 ); coverSprite.graphics.lineTo( stage.stageWidth, stage.stageHeight ); coverSprite.graphics.lineTo( 0, stage.stageHeight ); coverSprite.graphics.lineTo( 0, 0 ); this.addChild( coverSprite ); } } }
setStencilReferenceValue | () | metoda |
public function setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Ustawia wartość porównawczą szablonu stosowaną w testach szablonów.
Jest stosowanych wyłącznie 8 dolnych bitów wartości odniesienia. Długość wartości bufora szablonu także wynosi 8 bitów. Aby użyć bufora szablonu jako pola bitowego, należy zastosować parametry readMask
i writeMask
.
Parametry
referenceValue:uint — 8-bitowa wartość odniesienia stosowana w testach porównawczych wartości odniesienia.
| |
readMask:uint (default = 255 ) — 8-bitowa maska do zastosowania przed porównaniem zarówno w przypadku bieżącej wartości bufora szablonu, jak i wartości odniesienia.
| |
writeMask:uint (default = 255 ) — 8-bitowa maska zastosowana do wartości odniesienia przed zaktualizowaniem bufora szablonu.
|
Powiązane elementy interfejsu API
setTextureAt | () | metoda |
public function setTextureAt(sampler:int, texture:flash.display3D.textures:TextureBase):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Określa teksturę, która ma być stosowana w rejestrze tekstur wejściowych programu fragmentów.
Program fragmentów może odczytywać informacje z maksymalnie ośmiu obiektów tekstur. Ta funkcja pozwala przydzielić obiekt Texture lub CubeTexture do jednego z rejestrów próbników używanych przez program fragmentów.
Uwaga: w przypadku zmiany programu fragmentów (metodą setProgram
) na moduł cieniujący korzystający z mniejszej liczby tekstur należy ustawić dla nieużywanych rejestrów wartość null
.
setTextureAt( 7, null );
Parametry
sampler:int — Indeks rejestru próbnika. Wartość od 0 do 7.
| |
texture:flash.display3D.textures:TextureBase — Obiekt tekstury, który ma zostać udostępniony (wystąpienie klasy Texture lub CubeTexture).
|
Więcej informacji
Powiązane elementy interfejsu API
CubeTexture
setVertexBufferAt | () | metoda |
public function setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3 |
Określa, które składniki danych wierzchołków odpowiadają pojedynczym danym wejściowym programu modułu cieniującego wierzchołków.
Metoda setVertexBufferAt
pozwala określić, które składniki danych zdefiniowane dla każdego wierzchołka w buforze VertexBuffer3D należą do których wejść programu wierzchołków. Autor programu wierzchołków określa, ile danych jest wymaganych dla każdego wierzchołka. Dane są odwzorowywane z co najmniej 1 strumienia VertexBuffer3D
na rejestry atrybutów programu modułu cieniującego wierzchołków.
Najmniejsza jednostka danych przyjmowana przez moduł cieniujący wierzchołków to 32 bity danych. Przesunięcia w strumieniu wierzchołków są określane w wielokrotnościach 32 bitów.
Programista może na przykład zdefiniować każdy wierzchołek jako zawierający następujące dane:position: x float32 y float32 z float32 color: r unsigned byte g unsigned byte b unsigned byte a unsigned byteZakładając, że wierzchołek został zdefiniowany w obiekcie VertexBuffer3D o nazwie
buffer
, może on zostać przypisany do modułu cieniującego wierzchołków za pomocą poniższego kodu.
setVertexBufferAt( 0, buffer, 0, Context3DVertexBufferFormat.FLOAT_3 ); // attribute #0 will contain the position information setVertexBufferAt( 1, buffer, 3, Context3DVertexBufferFormat.BYTES_4 ); // attribute #1 will contain the color information
Parametry
index:int — Indeks rejestru atrybutów w module cieniującym wierzchołków (od 0 do 7).
| |
buffer:VertexBuffer3D — Bufor zawierający źródłowe dane wierzchołków do przekazania modułowi cieniującemu wierzchołków.
| |
bufferOffset:int (default = 0 ) — Przesunięcie od początku danych dla pojedynczego wierzchołka, w którym należy rozpocząć odczyt tego atrybutu. W powyższym przykładzie dane pozycji mają przesunięcie 0, ponieważ został użyty pierwszy atrybut. Kolor ma przesunięcie 3, ponieważ atrybut koloru następuje po trzech pozycjach wartości 32-bitowych. Przesunięcie jest określane w jednostkach 32-bitowych.
| |
format:String (default = "float4 ") — Wartość należąca do klasy Context3DVertexBufferFormat i określająca typ danych tego atrybutu.
|
Zgłasza
Error — Nieprawidłowe wyliczenie: gdy format nie jest jedną z wartości zdefiniowanych w klasie Context3DVertexBufferFormat.
| |
RangeError — Rejestr atrybutów poza zakresem: gdy właściwość parametru index nie należy do zakresu od 0 do 7. (Moduł cieniujący może używać maksymalnie 8 rejestrów atrybutów).
|
Więcej informacji
Powiązane elementy interfejsu API
package { import com.adobe.utils.AGALMiniAssembler; import com.adobe.utils.PerspectiveMatrix3D; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DTriangleFace; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.ErrorEvent; import flash.events.Event; import flash.geom.Matrix3D; import flash.geom.Vector3D; public class Context3DExample extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; public const zNear:Number = 1; public const zFar:Number = 500; public const fov:Number = 45; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private var projection:PerspectiveMatrix3D = new PerspectiveMatrix3D(); private var model:Matrix3D = new Matrix3D(); private var view:Matrix3D = new Matrix3D(); private var finalTransform:Matrix3D = new Matrix3D(); //For rotating the cube private const pivot:Vector3D = new Vector3D(); private const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + // 4x4 matrix transform "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3DExample() { this.stage.scaleMode = StageScaleMode.NO_SCALE; this.stage.align = StageAlign.TOP_LEFT; this.stage.nativeWindow.activate(); //AIR only stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.addEventListener( ErrorEvent.ERROR, contextCreationError ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); setupScene(); } private function setupScene():void { renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); renderContext.setCulling( Context3DTriangleFace.BACK ); //Create vertex index list for the triangles forming a cube var triangles:Vector.<uint> = Vector.<uint>( [ 2,1,0, //front face 3,2,0, 4,7,5, //bottom face 7,6,5, 8,11,9, //back face 9,11,10, 12,15,13, //top face 13,15,14, 16,19,17, //left face 17,19,18, 20,23,21, //right face 21,23,22 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes - cube faces do not share vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x,y,z r,g,b format 0,0,0, 1,0,0, //front face 0,1,0, 1,0,0, 1,1,0, 1,0,0, 1,0,0, 1,0,0, 0,0,0, 0,1,0, //bottom face 1,0,0, 0,1,0, 1,0,1, 0,1,0, 0,0,1, 0,1,0, 0,0,1, 1,0,0, //back face 1,0,1, 1,0,0, 1,1,1, 1,0,0, 0,1,1, 1,0,0, 0,1,1, 0,1,0, //top face 1,1,1, 0,1,0, 1,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,1, 0,0,1, //left face 0,1,0, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 1,1,0, 0,0,1, //right face 1,1,1, 0,0,1, 1,0,1, 0,0,1, 1,0,0, 0,0,1 ] ); vertexes = 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 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); //Set up 3D transforms projection.perspectiveFieldOfViewRH( fov, viewWidth/viewHeight, zNear, zFar ); view.appendTranslation( 0, 0, -2 ); //Move view back model.appendTranslation( -.5, -.5, -.5 ); //center cube on origin this.stage.addEventListener( Event.ENTER_FRAME, render ); } private function render( event:Event ):void { //Rotate model on each frame model.appendRotation( .5, Vector3D.Z_AXIS, pivot ); model.appendRotation( .5, Vector3D.Y_AXIS, pivot ); model.appendRotation( .5, Vector3D.X_AXIS, pivot ); //Combine transforms finalTransform.identity(); finalTransform.append( model ); finalTransform.append( view ); finalTransform.append( projection ); //Pass the final transform to the vertex shader as program constant, vc0 renderContext.setProgramConstantsFromMatrix( Context3DProgramType.VERTEX, 0, finalTransform, true ); //Clear is required before drawTriangles on each frame renderContext.clear( .3,.3,.3 ); //Draw the 12 triangles that make up the cube renderContext.drawTriangles( indexList, 0, 12 ); //Show the frame renderContext.present(); } private function contextCreationError( error:ErrorEvent ):void { trace( error.errorID + ": " + error.text ); } } }
Tue Jun 12 2018, 12:06 PM Z