Pacchetto | flash.display3D |
Classe | public final class Context3D |
Ereditarietà | Context3D EventDispatcher Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Un contesto di rendering include una superficie di disegno, nonché le risorse e lo stato associati. Se possibile, il contesto di rendering utilizza l'unità di elaborazione grafica (GPU) hardware. In caso contrario, il contesto di rendering utilizza il software. (Se su una piattaforma il rendering tramite Context3D non è supportato, la proprietà stage3Ds
dell'oggetto Stage contiene un elenco vuoto).
Il contesto di rendering Context3D è una pipeline programmabile molto simile a OpenGL ES 2. Essendo tuttavia astratto, è compatibile con una gamma di interfacce hardware e GPU. Pur essendo progettata per la grafica 3D, la pipeline di rendering non esegue obbligatoriamente il rendering in tre dimensioni. Di conseguenza, potete creare un renderer 2D specificando i programmi di frammenti, vertici e pixel appropriati. Sia nel caso di rendering 3D che 2D, la sola primitiva geometrica supportata è il triangolo.
Potete ottenere un'istanza della classe Context3D chiamando il metodo requestContext3D()
di un oggetto Stage3D. Per ogni stage può essere presente un numero limitato di oggetti Context3D, uno per ogni oggetto Stage3D nell'elenco Stage.stage3Ds
. Quando viene creato il contesto, l'oggetto Stage3D invia un evento context3DCreate
. Un contesto di rendering può essere eliminato e ricreato in qualsiasi momento, ad esempio quando viene attivata un'altra applicazione che utilizza la GPU. Nel codice dovreste prevedere di ricevere più eventi context3DCreate
. Posiziona l'area di rendering sullo stage utilizzando le proprietà x
e y
dell'istanza Stage3D associata.
Per il rendering e la visualizzazione di una scena (dopo aver ottenuto un oggetto Context3D), è in genere necessario procedere come segue:
- Configurate gli attributi del buffer di visualizzazione principale chiamando
configureBackBuffer()
. - Create e inizializzate le risorse di rendering, incluse le seguenti:
- Buffer di vertici e di indici che definiscono la geometria della scena
- Programmi di vertici e di pixel (shader) per il rendering della scena
- Texture
- Eseguite il rendering di un fotogramma:
- Impostate lo stato di rendering appropriato per un oggetto o un insieme di oggetti nella scena.
- Chiamate il metodo
drawTriangles()
per eseguire il rendering di un set di triangoli. - Modificate lo stato di rendering del successivo gruppo di oggetti.
- Chiamate
drawTriangles()
per disegnare i triangoli che definiscono gli oggetti. - Ripetete la procedura fino a completare il rendering della scena.
- Chiamate il metodo
present()
per visualizzare la scena di cui è stato eseguito il rendering.
Di seguito sono elencati i limiti del rendering:
Limiti delle risorse:
Risorsa | Numero consentito | Memoria totale |
---|---|---|
Buffer di vertici
| 4096 | 256 MB |
Buffer di indici
| 4096 | 128 MB |
Programmi
| 4096 | 16 MB |
Texture
| 4096 | 128 MB |
Texture cubiche
| 4096 | 256 MB |
Limiti AGAL: 200 opcode per programma.
Limiti delle chiamate a draw: 32.768 chiamate a drawTriangles()
per ogni chiamata a present()
.
Di seguito sono elencati i limiti relativi alle texture:
Limiti di texture per AIR 32 bit:
Texture | Dimensioni massime | Memoria GPU totale |
---|---|---|
Texture normale (sotto la linea di base estesa)
| 2048x2048 | 512 MB |
Texture normale (sulla linea di base estesa e sopra di essa)
| 4096x4096 | 512 MB |
Texture rettangolare (sotto la linea di base estesa)
| 2048x2048 | 512 MB |
Texture rettangolare (sulla linea di base estesa e sopra di essa)
| 4096x4096 | 512 MB |
Texture cubica
| 1024x1024 | 256 MB |
Limiti di texture per AIR 64 bit (desktop):
Texture | Dimensioni massime | Memoria GPU totale |
---|---|---|
Texture normale (sotto la linea di base estesa)
| 2048x2048 | 512 MB |
Texture normale (da linea di base estesa a standard)
| 4096x4096 | 512 MB |
Texture normale (standard estesa e superiore)
| 4096x4096 | 2048 MB |
Texture rettangolare (sotto la linea di base estesa)
| 2048x2048 | 512 MB |
Texture rettangolare (linea di base estesa a standard)
| 4096x4096 | 512 MB |
Texture rettangolare (standard estesa e superiore)
| 4096x4096 | 2048 MB |
Texture cubica
| 1024x1024 | 256 MB |
512 MB è il limite assoluto per le texture e include la memoria texture richiesta per le mipmap. Tuttavia, il limite di memoria per le texture cubiche è di 256 MB.
Non è possibile creare oggetti Context3D con la funzione di costruzione Context3D. Viene costruito ed è disponibile come proprietà di un'istanza Stage3D. La classe Context3D può essere utilizzata sulle piattaforme mobili e desktop, sia in Flash Player sia in AIR.
Altre informazioni
Elementi API correlati
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
Proprietà | Definito da | ||
---|---|---|---|
backBufferHeight : int [sola lettura]
Specifica l’altezza del back buffer, che è possibile modificare con una chiamata corretta al metodo configureBackBuffer(). | Context3D | ||
backBufferWidth : int [sola lettura]
Specifica la larghezza del back buffer, che è possibile modificare con una chiamata corretta al metodo configureBackBuffer(). | Context3D | ||
constructor : Object
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto. | Object | ||
driverInfo : String [sola lettura]
Il tipo di driver di libreria grafica utilizzato da questo contesto di rendering. | Context3D | ||
enableErrorChecking : Boolean
Specifica se gli errori rilevati dal renderer vengono segnalati all'applicazione. | Context3D | ||
maxBackBufferHeight : int
Specifica l’altezza massima del back buffer. | Context3D | ||
maxBackBufferWidth : int
Specifica la larghezza massima del back buffer. | Context3D | ||
profile : String [sola lettura]
Il profilo di supporto delle funzionalità utilizzato da questo oggetto Context3D. | Context3D | ||
supportsVideoTexture : Boolean [statico] [sola lettura]
Indica se Context3D supporta la texture video. | Context3D | ||
totalGPUMemory : Number [sola lettura]
Restituisce la memoria GPU totale assegnata mediante le strutture di dati Stage3D di un'applicazione. Ogni volta che viene creato un oggetto della risorsa GPU, la memoria utilizzata viene memorizzata in Context3D. | Context3D |
Metodo | Definito da | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registra un oggetto listener di eventi con un oggetto EventDispatcher, in modo che il listener riceva la notifica di un evento. | 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
Cancella i buffer del colore, della profondità e di stencil associati a questo oggetto Context3D e li riempie con i valori specificati. | Context3D | ||
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Imposta le dimensioni del riquadro di visualizzazione e altri attributi del buffer di rendering. | Context3D | ||
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Crea un oggetto CubeTexture. | Context3D | ||
Crea un oggetto IndexBuffer3D. | Context3D | ||
Crea un oggetto Program3D. | Context3D | ||
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Crea un oggetto RectangleTexture. | Context3D | ||
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Crea un oggetto Texture. | Context3D | ||
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Crea un oggetto VertexBuffer3D. | Context3D | ||
createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Crea un oggetto VertexBuffer3D per i dati delle istanze. | Context3D | ||
Crea un oggetto VideoTexture. | Context3D | ||
Invia un evento nel flusso di eventi. | EventDispatcher | ||
Libera tutte le risorse e l'archiviazione interna associate a questo oggetto Context3D. | Context3D | ||
Disegna il buffer di rendering corrente su una bitmap. | Context3D | ||
Eseguite il rendering dei triangoli specificati tramite i buffer e lo stato attuali di questo oggetto Context3D. | Context3D | ||
drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Eseguite il rendering delle istanze dei triangoli specificate tramite i buffer e lo stato attuali di questo oggetto Context3D. | Context3D | ||
Verifica se per l'oggetto EventDispatcher sono presenti listener registrati per un tipo specifico di evento. | EventDispatcher | ||
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
Visualizza il back buffer di rendering. | Context3D | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Rimuove un listener dall'oggetto EventDispatcher. | EventDispatcher | ||
Specifica i fattori utilizzati per fondere il colore di output di un'operazione di disegno con il colore esistente. | Context3D | ||
Imposta la maschera utilizzata per la scrittura dei colori nel buffer di rendering. | Context3D | ||
Imposta la modalità di culling dei triangoli. | Context3D | ||
Imposta il tipo di confronto utilizzato per il test di profondità. | Context3D | ||
Imposta la modalità di riempimento usata per il rendering. | Context3D | ||
Imposta i programmi shader di vertici e di frammenti da utilizzare per il successivo rendering. | Context3D | ||
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Imposta le costanti da impiegare nei programmi shader che utilizzano i valori memorizzati in un oggetto ByteArray. | Context3D | ||
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Imposta le costanti da impiegare nei programmi shader che utilizzano i valori memorizzati in un oggetto Matrix3D. | Context3D | ||
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Imposta gli input di costanti per i programmi shader. | Context3D | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
Imposta il back buffer di rendering come destinazione di rendering. | Context3D | ||
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Imposta la texture specificata come destinazione di rendering. | Context3D | ||
Sostituisce manualmente lo stato del campionatore di texture. | Context3D | ||
Imposta un rettangolo scissor, che è un tipo di maschera di disegno. | Context3D | ||
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Imposta l'operazione e la modalità stencil. | Context3D | ||
Imposta il valore di confronto stencil utilizzato per il test di stencil. | Context3D | ||
Specifica la texture da utilizzare per un registro di input texture di un programma di frammenti. | Context3D | ||
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Specifica quali componenti dati di vertice corrispondono a un singolo input di programma shader di vertici. | Context3D | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
Restituisce la rappresentazione in formato stringa dell'oggetto specificato. | Object | ||
Restituisce il valore di base dell'oggetto specificato. | Object | ||
Verifica se un listener di eventi è registrato con questo oggetto EventDispatcher o qualsiasi suo antenato per il tipo di evento specificato. | EventDispatcher |
backBufferHeight | proprietà |
backBufferHeight:int
[sola lettura] Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 15, AIR 15 |
Specifica l’altezza del back buffer, che è possibile modificare con una chiamata corretta al metodo configureBackBuffer()
. È possibile modificare l’altezza quando cambia il fattore di zoom del browser se wantsBestResolutionOnBrowserZoom
è impostato su true
nell’ultima chiamata corretta al metodo configureBackBuffer()
. È possibile rilevare la modifica dell’altezza registrando un listener di eventi per l’evento di modifica dello zoom del browser.
Implementazione
public function get backBufferHeight():int
Elementi API correlati
backBufferWidth | proprietà |
backBufferWidth:int
[sola lettura] Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 15, AIR 15 |
Specifica la larghezza del back buffer, che è possibile modificare con una chiamata corretta al metodo configureBackBuffer()
. È possibile modificare la larghezza quando cambia il fattore di zoom del browser se wantsBestResolutionOnBrowserZoom
è impostato su true
nell’ultima chiamata corretta al metodo configureBackBuffer()
. È possibile rilevare la modifica della larghezza registrando un listener di eventi per l’evento di modifica dello zoom del browser.
Implementazione
public function get backBufferWidth():int
Elementi API correlati
driverInfo | proprietà |
driverInfo:String
[sola lettura] Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Il tipo di driver di libreria grafica utilizzato da questo contesto di rendering. Indica se per il rendering viene utilizzato un software, un driver DirectX o un driver OpenGL. Indica anche se il rendering hardware ha avuto esito negativo. Se il rendering hardware non riesce, Flash Player usa il rendering software per Stage3D e driverInfo
contiene uno dei valori seguenti:
- "Software Hw_disabled=userDisabled" - La casella di controllo Attiva accelerazione hardware nelle Impostazioni di Adobe Flash Player non è selezionata.
- "Software Hw_disabled=oldDriver" - Problema del driver grafico hardware. L’aggiornamento del driver grafico potrebbe risolvere il problema.
- "Software Hw_disabled=unavailable" - Problema del driver grafico hardware o errore di inizializzazione della grafica hardware.
- "Software Hw_disabled=explicit" - Il contenuto ha richiesto esplicitamente il rendering software mediante requestContext3D.
- "Software Hw_disabled=domainMemory" - Il contenuto utilizza domainMemory, che richiede una licenza quando è utilizzato con il rendering hardware Stage3D. Visitate adobe.com/go/fpl_it.
Implementazione
public function get driverInfo():String
enableErrorChecking | proprietà |
enableErrorChecking:Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Specifica se gli errori rilevati dal renderer vengono segnalati all'applicazione.
Quando enableErrorChecking
è true
, i metodi clear()
e drawTriangles()
sono sincroni e possono generare errori. Quando enableErrorChecking
è false
(impostazione predefinita), i metodi clear()
e drawTriangles()
sono asincroni e gli errori non vengono segnalati. L'abilitazione del controllo errori riduce le prestazioni di rendering. È consigliabile abilitare il controllo errori solo durante il debug.
Implementazione
public function get enableErrorChecking():Boolean
public function set enableErrorChecking(value:Boolean):void
Elementi API correlati
maxBackBufferHeight | proprietà |
maxBackBufferHeight:int
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 15, AIR 15 |
Specifica l’altezza massima del back buffer. Il valore iniziale è il limite di sistema nella piattaforma. La proprietà può essere impostata su un valore minore o uguale, ma non maggiore, al limite di sistema. La proprietà può essere impostata su un valore maggiore o uguale, ma non minore, al limite minimo. Il limite minimo è un valore costante, 32, quando il back buffer non è configurato. Il limite minimo sarà il valore del parametro height nell’ultima chiamata corretta al metodo configureBackBuffer()
dopo la configurazione del back buffer.
Implementazione
public function get maxBackBufferHeight():int
public function set maxBackBufferHeight(value:int):void
maxBackBufferWidth | proprietà |
maxBackBufferWidth:int
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 15, AIR 15 |
Specifica la larghezza massima del back buffer. Il valore iniziale è il limite di sistema nella piattaforma. La proprietà può essere impostata su un valore minore o uguale, ma non maggiore, al limite di sistema. La proprietà può essere impostata su un valore maggiore o uguale, ma non minore, al limite minimo. Il limite minimo è un valore costante, 32, quando il back buffer non è configurato. Il limite minimo sarà il valore del parametro width dell’ultima chiamata corretta al metodo configureBackBuffer()
dopo la configurazione del back buffer.
Implementazione
public function get maxBackBufferWidth():int
public function set maxBackBufferWidth(value:int):void
profile | proprietà |
supportsVideoTexture | proprietà |
totalGPUMemory | proprietà |
totalGPUMemory:Number
[sola lettura] Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 21, AIR 21 |
Restituisce la memoria GPU totale assegnata mediante le strutture di dati Stage3D di un'applicazione.
Ogni volta che viene creato un oggetto della risorsa GPU, la memoria utilizzata viene memorizzata in Context3D. Questa memoria include i buffer di indici, buffer di vertici, le texture (tranne le video texture) e i programmi creati mediante questo Context3D.
L'API totalGPUMemory
restituisce all'utente la memoria totale utilizzata dalle risorse di cui sopra. Il valore predefinito restituito è 0. La memoria GPU totale restituita è espressa in byte. Informazioni sono disponibili solo in modalità Diretta su telefoni cellulari e in modalità Diretta e GPU sul desktop. (Sul desktop, se utilizzate <renderMode>gpu</renderMode>
verrà eseguito il fallback a <renderMode>direct</renderMode>
)
Implementazione
public function get totalGPUMemory():Number
clear | () | metodo |
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
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Cancella i buffer del colore, della profondità e di stencil associati a questo oggetto Context3D e li riempie con i valori specificati.
Impostate il parametro mask
per specificare i buffer da cancellare. Utilizzate le costanti definite nella classe Context3DClearMask per impostare il parametro mask
. Utilizzate l'operatore OR bit a bit, "|", per aggiungere più buffer alla maschera (o utilizzate Context3DClearMask.ALL
). Quando si esegue il rendering sul back buffer, il metodo configureBackBuffer()
deve essere chiamato prima di qualsiasi chiamata clear()
.
Nota: se specificate il valore di un parametro al di fuori dell'intervallo consentito, i valori del parametro Numeric vengono fissati all'intervallo da zero a uno senza visualizzare messaggi. Analogamente, se stencil
è maggiore di 0xff, viene impostato su 0xff.
Parametri
red:Number (default = 0.0 ) — il componente rosso del colore con cui cancellare il buffer del colore, compreso in un intervallo da zero a uno.
| |
green:Number (default = 0.0 ) — il componente verde del colore con cui cancellare il buffer del colore, compreso in un intervallo da zero a uno.
| |
blue:Number (default = 0.0 ) — il componente blu del colore con cui cancellare il buffer del colore, compreso in un intervallo da zero a uno.
| |
alpha:Number (default = 1.0 ) — il componente alfa del colore con cui cancellare il buffer del colore, compreso in un intervallo da zero a uno. La componente alfa non viene utilizzata per la fusione. Viene scritta direttamente nel buffer alfa.
| |
depth:Number (default = 1.0 ) — il valore con cui cancellare il buffer della profondità, compreso in un intervallo da zero a uno.
| |
stencil:uint (default = 0 ) — il valore di 8 bit con cui cancellare il buffer di stencil, compreso in un intervallo da 0x00 a 0xff.
| |
mask:uint (default = 0xffffffff ) — specifica i buffer da cancellare.
|
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.
|
Elementi API correlati
configureBackBuffer | () | metodo |
public function configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta le dimensioni del riquadro di visualizzazione e altri attributi del buffer di rendering.
Il rendering viene inserito in un doppio buffer. Il back buffer viene scambiato con il front buffer visibile quando si chiama il metodo present()
. La dimensione minima del buffer è di 32x32 pixel. La dimensione massima del back buffer è limitata dalle potenzialità del dispositivo e può inoltre essere impostata dall’utente tramite le proprietà maxBackBufferWidth
e maxBackBufferHeight
. La configurazione del buffer è un'operazione lenta. Evitate di modificare la dimensione o gli attributi del buffer durante le normali operazioni di rendering.
Parametri
width:int — larghezza in pixel del buffer.
| |||||||||
height:int — altezza in pixel del buffer.
| |||||||||
antiAlias:int — Un valore intero che specifica la qualità di antialiasing richiesta. Il valore è correlato al numero di sottocampioni utilizzati durante l'antialiasing. L'uso di un maggior numero di sottocampioni richiede l'esecuzione di più calcoli, sebbene l'impatto relativo sulle prestazioni dipenda dallo specifico hardware di rendering. Il tipo di antialiasing e l'esecuzione o meno dell'antialiasing dipendono dal dispositivo e dalla modalità di rendering. L'antialiasing non è supportato dal contesto di rendering software.
| |||||||||
enableDepthAndStencil:Boolean (default = true ) — false indica che non viene creato nessun buffer di profondità o di stencil, mentre true crea un buffer di profondità e un buffer di stencil. Per un'applicazione AIR 3.2 o successiva compilata con SWF versione 15 o successiva, se l'elemento renderMode nel file descrittore dell'applicazione è direct , allora l'elemento depthAndStencil nel file descrittore dell'applicazione deve avere lo stesso valore di questo argomento. Per impostazione predefinita, il valore dell'elemento depthAndStencil è false .
| |||||||||
wantsBestResolution:Boolean (default = false ) — true indica che se il dispositivo supporta gli schermi HiDPI, esso tenta di assegnare un back buffer più grande di quanto indicato dai parametri width e height. Poiché in questo modo vengono aggiunti più pixel e potenzialmente viene modificato il risultato delle operazioni shader, questa opzione è disattivata per impostazione predefinita. Utilizzate Stage.contentsScaleFactor per determinare di quanto è stato ingrandito il back buffer nativo.
| |||||||||
wantsBestResolutionOnBrowserZoom:Boolean (default = false ) — true indica che le dimensioni del back buffer devono aumentare in proporzione all’aumento del fattore di zoom del browser. L’impostazione di questo valore è persistente tra diversi zoom del browser. Il valore predefinito del parametro è false . Impostare le proprietà maxBackBufferWidth e maxBackBufferHeight per limitare l’aumento di dimensioni del back buffer. Utilizzare backBufferWidth e backBufferHeight per determinare le dimensioni correnti del back buffer.
|
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — Dimensione di input errata: il parametro width o height è minore delle dimensioni di back buffer minime consentite o maggiore delle dimensioni di back buffer massime consentite.
| |
Error — 3709: Il flag depthAndStencil flag nel descrittore dell'applicazione deve corrispondere al valore booleano enableDepthAndStencil passato a configureBackBuffer() nell'oggetto Context3D.
|
createCubeTexture | () | metodo |
public function createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Crea un oggetto CubeTexture.
Utilizzate un oggetto CubeTexture per caricare bitmap di texture cubiche nel contesto di rendering e per fare riferimento a una texture cubica durante il rendering. Una texture cubica consiste di sei texture quadrate di uguali dimensioni, disposte secondo una topologia cubica; le texture cubiche sono utili per descrivere le mappe d'ambiente.
Non è possibile creare oggetti CubeTexture con una funzione di costruzione CubeTexture; utilizzate invece questo metodo. Dopo aver creato un oggetto CubeTexture, caricate i dati delle bitmap di texture utilizzando i metodi CubeTexture uploadFromBitmapData()
, uploadFromByteArray()
o uploadCompressedTextureFromByteArray()
.
Parametri
size:int — La lunghezza del bordo della texture in texel.
| |
format:String — Il formato texel dell’elenco enumerato Context3DTextureFormat.
La compressione delle texture permette di memorizzare le immagini delle texture in formato compresso direttamente sulla GPU, risparmiando memoria GPU e larghezza di banda della memoria. In genere, i fotogrammi appiattiti sono compresse offline e vengono caricati nella GPU nel modulo convertita mediante il metodo di Texture.uploadCompressedTextureFromByteArray. Flash Player 11.4 e AIR 3.4 su piattaforme desktop supportano la compressione runtime delle texture, che risulta utile in determinate situazioni quale il rendering di texture dinamiche dalla grafica vettoriale. Questa funzione non è attualmente disponibile sulle piattaforme mobili e viene generato un ArgumentError (formato texture non corrispondente). Per utilizzare la compressione runtime delle texture, procedete nel modo seguente: 1. Create l’oggetto texture chiamando il metodo Context3D.createCubeTexture(), passando come parametro format flash.display3D.Context3DTextureFormat.COMPRESSED oppure flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA. 2. Utilizzando l’istanza flash.display3D.textures.Texture restituita da createCubeTexture(), chiamate flash.display3D.textures.CubeTexture.uploadFromBitmapData() o flash.display3D.textures.CubeTexture.uploadFromByteArray() per caricare e comprimere la texture in un unico passaggio. | |
optimizeForRenderToTexture:Boolean — Impostato su true se la texture verrà probabilmente utilizzata come target di rendering.
| |
streamingLevels:int (default = 0 ) — Il livello MIP map che deve essere caricato prima di eseguire il rendering dell’immagine. Lo streaming di texture offre la possibilità di caricare e visualizzare per primi i livelli mip più piccoli e quindi di visualizzare progressivamente immagini di qualità più elevata man mano che le texture vengono caricate. Gli utenti finali possono visualizzare in un’applicazione immagini di qualità inferiore mentre le immagini di qualità più elevata sono in fase di caricamento.
Per impostazione predefinita, streamingLevels è 0 e indica che è necessario caricare l’immagine di qualità più elevata nella mappa MIP prima di eseguire il rendering dell’immagine. Questo parametro è stato aggiunto in Flash Player 11.3 e AIR 3.3. Utilizzate il valore predefinito 0 per mantenere il comportamento delle versioni precedenti di Flash Player e AIR. Impostate Nota: l’impostazione della proprietà su un valore maggiore di 0 può incidere sull’utilizzo della memoria e sulle prestazioni. |
flash.display3D.textures:CubeTexture |
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — Limite risorse superato: troppi oggetti Texture creati oppure la quantità di memoria allocata alle texture è stata superata.
| |
ArgumentError — Texture di profondità non implementata: se si tenta di creare una texture di profondità.
| |
ArgumentError — Dimensione texture pari a zero: se il parametro size non è maggiore di zero.
| |
ArgumentError — La texture non è una potenza di due: se il parametro size non è una potenza di due.
| |
ArgumentError — Texture troppo grande: se il parametro size è maggiore di 1024.
| |
Error — Creazione texture non riuscita: se il contesto di rendering non riesce a creare l’oggetto CubeTexture (ma non sono disponibili informazioni sulla causa).
| |
ArgumentError — Livello di streaming non valido: se streamingLevels è maggiore o uguale a log2(dimensione).
|
Elementi API correlati
createIndexBuffer | () | metodo |
public function createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Crea un oggetto IndexBuffer3D.
Utilizzate un oggetto IndexBuffer3D per caricare una serie di indici di triangoli nel contesto di rendering e per fare riferimento a tale serie di indici per il rendering. Ogni indice nel buffer di indici fa riferimento a un vertice corrispondente nel buffer di vertici. Ogni serie di tre indici identifica un triangolo. Passate l'oggetto IndexBuffer3D al metodo drawTriangles()
per eseguire il rendering di uno o più triangoli definiti nel buffer di indici.
Non è possibile creare oggetti IndexBuffer3D con la funzione di costruzione della classe IndexBuffer3D; utilizzate invece questo metodo. Dopo aver creato un oggetto IndexBuffer3D, caricate gli indici utilizzando il metodo IndexBuffer3D uploadFromVector()
o uploadFromByteArray()
.
Parametri
numIndices:int — Il numero di vertici da memorizzare nel buffer.
| |
bufferUsage:String (default = "staticDraw ") — L’uso del buffer previsto. Utilizzate una delle costanti definite nella classe Context3DBufferUsage . Il driver hardware può eseguire un’ottimizzazione adeguata se viene impostato correttamente. Questo parametro è disponibile solo nelle versioni successive di Flash 12/AIR 4.
|
IndexBuffer3D |
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — Limite risorse superato: troppi oggetti buffer di indici creati oppure la quantità di memoria allocata ai buffer di indici è stata superata.
| |
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.
| |
ArgumentError — Buffer troppo grande: quando numIndices è maggiore o uguale a 0xf0000.
|
Elementi API correlati
createProgram | () | metodo |
public function createProgram():Program3D
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Crea un oggetto Program3D.
Utilizzate un oggetto Program3D per caricare programmi shader nel contesto di rendering e per fare riferimento ai programmi caricati durante il rendering. Un oggetto Program3D memorizza due programmi: un programma di vertici e uno di frammenti (denominato anche programma di pixel). I programmi vengono scritti in linguaggio di assemblaggio shader binario.
Non è possibile creare oggetti Program3D con la funzione di costruzione Program3D; utilizzate invece questo metodo. Dopo aver creato un oggetto Program3D, caricate i programmi utilizzando il metodo Program3D upload()
.
Program3D |
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — Il numero di programmi è maggiore di 4096 o la dimensione totale della memoria è maggiore di 16 MB (utilizzate dispose per liberare risorse Program3D).
|
Elementi API correlati
Esempio ( Come utilizzare questo esempio )
renderContext
, è un'istanza della classe Context3D. I programmi contenuti nell'esempio sono scritti nel linguaggio 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 | () | metodo |
public function createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.8, AIR 3.8 |
Crea un oggetto RectangleTexture.
Utilizzate un oggetto RectangleTexture per caricare bitmap di texture nel contesto di rendering e per fare riferimento a una texture durante il rendering.
Non è possibile creare oggetti RectangleTexture con una funzione di costruzione RectangleTexture; utilizzate invece questo metodo. Dopo aver creato un oggetto Rectangle Texture, caricate i dati delle bitmap di texture utilizzando il metodo Texture uploadFromBitmapData()
o uploadFromByteArray()
.
Tenete presente che le texture con intero a 32 bit vengono memorizzate in un formato di pacchetto BGRA per corrispondere al formato Flash BitmapData
. Le texture a virgola mobile utilizzano un formato RGBA standard.
Le texture rettangolari si differenziano dalle normali texture 2D poiché la loro larghezza e altezza non devono essere una potenza di due. Inoltre, non contengono mip map. Sono particolarmente utili per i rendering su texture. Se una texture rettangolare viene utilizzata con un campionatore che utilizza il filtraggio delle mip map o il wrapping ripetuto, la chiamata drawTriangles non riesce. Inoltre, la texture rettangolare non supporta lo streaming. Gli unici formati texture supportati dalle texture rettangolari sono BGRA, BGR_PACKED, BGRA_PACKED. I formati texture compressi non sono supportati dalle texture rettangolari.
Parametri
width:int — La larghezza della texture in texel.
| |
height:int — L’altezza della texture in texel.
| |
format:String — Il formato texel dell’elenco enumerato Context3DTextureFormat.
| |
optimizeForRenderToTexture:Boolean — Impostato su true se la texture verrà probabilmente utilizzata come target di rendering.
|
flash.display3D.textures:RectangleTexture |
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — Limite risorse superato: troppi oggetti Texture creati oppure la quantità di memoria allocata alle texture è stata superata.
| |
ArgumentError — Dimensione texture pari a zero: se il parametro width o height non è maggiore di zero.
| |
ArgumentError — Texture troppo grande: se il parametro width o height è maggiore di 2048.
| |
Error — Creazione texture non riuscita: se il contesto di rendering non riesce a creare l'oggetto Texture (ma non sono disponibili informazioni sulla causa).
| |
Error — Richiede il profilo di base o superiore: se la texture rettangolare è creata con profilo vincolato di base.
|
Elementi API correlati
createTexture | () | metodo |
public function createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Crea un oggetto Texture.
Utilizzate un oggetto Texture per caricare bitmap di texture nel contesto di rendering e per fare riferimento a una texture durante il rendering.
Non è possibile creare oggetti Texture con una funzione di costruzione Texture; utilizzate invece questo metodo. Dopo aver creato un oggetto Texture, caricate i dati delle bitmap di texture utilizzando i metodi Texture uploadFromBitmapData()
, uploadFromByteArray()
o uploadCompressedTextureFromByteArray()
.
Tenete presente che le texture con intero a 32 bit vengono memorizzate in un formato di pacchetto BGRA per corrispondere al formato Flash BitmapData
. Le texture a virgola mobile utilizzano un formato RGBA standard.
Parametri
width:int — La larghezza della texture in texel.
| |
height:int — L’altezza della texture in texel.
| |
format:String — Il formato texel dell’elenco enumerato Context3DTextureFormat.
La compressione delle texture permette di memorizzare le immagini delle texture in formato compresso direttamente sulla GPU, risparmiando memoria GPU e larghezza di banda della memoria. In genere, i fotogrammi appiattiti sono compresse offline e vengono caricati nella GPU nel modulo convertita mediante il metodo di Texture.uploadCompressedTextureFromByteArray. Flash Player 11.4 e AIR 3.4 su piattaforme desktop supportano la compressione runtime delle texture, che risulta utile in determinate situazioni quale il rendering di texture dinamiche dalla grafica vettoriale. Questa funzione non è attualmente disponibile sulle piattaforme mobili e viene generato un ArgumentError (formato texture non corrispondente). Per utilizzare la compressione runtime delle texture, procedete nel modo seguente: 1. Create l’oggetto texture con il metodo Context3D.createTexture(), passando come parametro format flash.display3D.Context3DTextureFormat.COMPRESSED oppure flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA. 2. Utilizzando l’istanza flash.display3D.textures.Texture restituita da createTexture(), chiamate flash.display3D.textures.Texture.uploadFromBitmapData() o flash.display3D.textures.Texture.uploadFromByteArray() per caricare e comprimere la texture in un unico passaggio. | |
optimizeForRenderToTexture:Boolean — Impostato su true se la texture verrà probabilmente utilizzata come target di rendering.
| |
streamingLevels:int (default = 0 ) — Il livello MIP map che deve essere caricato prima di eseguire il rendering dell’immagine. Lo streaming di texture offre la possibilità di caricare e visualizzare per primi i livelli mip più piccoli e quindi di visualizzare progressivamente immagini di qualità più elevata man mano che le texture vengono caricate. Gli utenti finali possono visualizzare in un’applicazione immagini di qualità inferiore mentre le immagini di qualità più elevata sono in fase di caricamento.
Per impostazione predefinita, streamingLevels è 0 e indica che è necessario caricare l’immagine di qualità più elevata nella mappa MIP prima di eseguire il rendering dell’immagine. Questo parametro è stato aggiunto in Flash Player 11.3 e AIR 3.3. Utilizzate il valore predefinito 0 per mantenere il comportamento delle versioni precedenti di Flash Player e AIR. Impostate Nota: l’impostazione della proprietà su un valore maggiore di 0 può incidere sull’utilizzo della memoria e sulle prestazioni. |
flash.display3D.textures:Texture |
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — Limite risorse superato: troppi oggetti Texture creati oppure la quantità di memoria allocata alle texture è stata superata.
| |
ArgumentError — Texture di profondità non implementata: se si tenta di creare una texture di profondità.
| |
ArgumentError — Dimensione texture pari a zero: se il parametro width o height non è maggiore di zero.
| |
ArgumentError — La texture non è una potenza di due: se i parametri width e height non sono una potenza di due.
| |
ArgumentError — Texture troppo grande: se il parametro width o height è maggiore di 2048 per la base e il profilo di base o se il parametro width o height è maggiore di 4096 per la base profilo estesa e superiore.
| |
Error — Creazione texture non riuscita: se il contesto di rendering non riesce a creare l’oggetto Texture (ma non sono disponibili informazioni sulla causa).
| |
ArgumentError — Livello di streaming non valido: se streamingLevels è maggiore o uguale a log2(min(larghezza,altezza)).
|
Elementi API correlati
createVertexBuffer | () | metodo |
public function createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Crea un oggetto VertexBuffer3D.
Utilizzate un oggetto VertexBuffer3D per caricare una serie di dati di vertici nel contesto di rendering. Un buffer di vertici contiene i dati necessari per eseguire il rendering di ciascun punto nella geometria della scena. Gli attributi dati associati a ciascun vertice includono solitamente le coordinate di posizione, colore e texture e fungono da input per il programma shader di vertici. Per identificare i valori dei dati che corrispondono a uno degli input del programma di vertici, utilizzate il metodo setVertexBufferAt()
. È possibile specificare fino a 64 valori a 32 bit per ciascun vertice.
Non è possibile creare oggetti VertexBuffer3D con la funzione di costruzione VertexBuffer3D; utilizzate invece questo metodo. Dopo aver creato un oggetto VertexBuffer3D, caricate i dati dei vertici utilizzando il metodo VertexBuffer3D uploadFromVector()
o uploadFromByteArray()
.
Parametri
numVertices:int — Il numero di vertici da memorizzare nel buffer. Il numero massimo di vertici in un singolo buffer è 65535.
| |
data32PerVertex:int — Il numero di valori di dati a 32 bit (4 byte) associato a ciascun vertice. Il numero massimo di elementi dati a 32 bit per vertice è 64 (o 256 byte). Solo otto registri di attributo sono accessibili a un programma shader di vertici in un dato momento. Utilizzate SetVertextBufferAt() per seleziona gli attributi dall'interno di un buffer di vertici.
| |
bufferUsage:String (default = "staticDraw ") — L’uso del buffer previsto. Utilizzate una delle costanti definite nella classe Context3DBufferUsage . Il driver hardware può eseguire un’ottimizzazione adeguata se viene impostato correttamente. Questo parametro è disponibile solo nelle versioni successive di Flash 12/AIR 4.
|
VertexBuffer3D |
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — Limite risorse superato: troppi oggetti buffer di vertici creati oppure la quantità di memoria allocata ai buffer di vertici è stata superata.
| |
ArgumentError — Buffer troppo grande: numVertices è maggiore di 0x10000 o data32PerVertex è maggiore di 64.
| |
ArgumentError — Dimensione buffer pari a zero: quando numVertices è zero o data32PerVertex è zero.
| |
ArgumentError — Creazione buffer non riuscita: se il contesto di rendering non riesce a creare l'oggetto VertexBuffer3D (ma non sono disponibili informazioni aggiuntive sulla causa).
| |
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.
|
Elementi API correlati
Esempio ( Come utilizzare questo esempio )
setVertexBufferAt()
per specificare che i primi tre punti dati vengano passati al programma di vertici come tre valori a virgola mobile in va0 e che i secondi tre punti dati vengano passati come va1. Un programma di vertici può avere fino a otto input (denominati anche registri attributi di vertici) definiti in questo modo.
const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); var vertexes:VertexBuffer3D = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va0 as the position data renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va1 as the color data
createVertexBufferForInstances | () | metodo |
public function createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 20.0 |
Crea un oggetto VertexBuffer3D per i dati delle istanze.
Utilizzate un oggetto VertexBuffer3D per caricare una serie di dati di istanza nel contesto di rendering. Un buffer di vertici contiene i dati necessari per eseguire il rendering di ogni istanza nella geometria della scena. I buffer di vertici con dati di istanza forniscono attributi comuni a tutti i vertici di un’istanza e fungono da input per il programma di shader dei vertici. Per identificare i valori dei dati che corrispondono a uno degli input del programma di vertici, utilizzate il metodo setVertexBufferAt()
. È possibile specificare fino a 64 valori a 32 bit per ciascun elemento del buffer di vertici.
Non è possibile creare oggetti VertexBuffer3D con la funzione di costruzione VertexBuffer3D; utilizzate invece questo metodo. Dopo aver creato un oggetto VertexBuffer3D, caricate i dati dei vertici utilizzando il metodo VertexBuffer3D uploadFromVector()
o uploadFromByteArray()
.
Parametri
numVertices:int — il numero di elementi da memorizzare nel buffer. Il numero massimo di elementi in un singolo buffer è 65535.
| |
data32PerVertex:int — il numero di valori di dati a 32 bit(4 byte) associato a ciascun elemento. Il numero massimo di elementi dati a 32 bit per vertice è 64 (o 256 byte).
| |
instancesPerElement:int — il numero di istanze che utilizzeranno un elemento del buffer di vertici.
| |
bufferUsage:String (default = "staticDraw ") — L’uso del buffer previsto. Utilizzate una delle costanti definite nella classe Context3DBufferUsage . Il driver hardware può eseguire un’ottimizzazione adeguata se viene impostato correttamente. Questo parametro è disponibile solo nelle versioni successive di Flash 12/AIR 4.
|
VertexBuffer3D |
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — Limite risorse superato: troppi oggetti buffer di vertici creati oppure la quantità di memoria allocata ai buffer di vertici è stata superata.
| |
ArgumentError — Buffer troppo grande: numVertices è maggiore di 0x10000 o data32PerVertex è maggiore di 64.
| |
ArgumentError — Dimensione buffer pari a zero: quando numVertices è zero o data32PerVertex è zero.
| |
ArgumentError — Creazione buffer non riuscita: se il contesto di rendering non riesce a creare l'oggetto VertexBuffer3D (ma non sono disponibili informazioni aggiuntive sulla causa).
| |
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.
| |
Error — Richiede profilo esteso standard o superiore: se questo metodo è utilizzato quando il profilo richiesto è inferiore al profilo esteso standard.
| |
Error — Istanze non valide per l’elemento: se instancesPerElement non è maggiore di zero.
|
Elementi API correlati
createVideoTexture | () | metodo |
public function createVideoTexture():flash.display3D.textures:VideoTexture
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 17.0, Flash Player 18.0 |
Crea un oggetto VideoTexture.
Utilizzate un oggetto VideoTexture per ottenere i fotogrammi video come texture da un oggetto NetStream o Camera e per caricare i fotogrammi video al contesto di rendering.
L'oggetto VideoTexture non può essere creato con la funzione di costruzione VideoTexture; utilizzate questo metodo. Dopo avere creato un oggetto VideoTexture, associate l'oggetto NetStream o Camera per ottenere i fotogrammi video con il metodo attachNetStream()
o attachCamera()
di VideoTexture.
Tenete presente che questo metodo restituisce null se il sistema non supporta questa funzione.
VideoTexture non contiene mipmap. Se VideoTexture viene utilizzato con un campionatore che utilizza il filtraggio delle mip map o il wrapping ripetuto, la chiamata drawTriangles non riesce. VideoTexture può essere considerato come texture BGRA dagli shader. La creazione di un’istanza dell’oggetto VideoTexture non riuscirà se Context3D è stato richiesto con la modalità di rendering software.
Per un'istanza Context3D sono disponibili un massimo di 4 oggetti VideoTexture. Sui dispositivi mobili, il numero effettivo di oggetti VideoTexture supportati può essere inferiore a 4, a causa di limitazioni della piattaforma.
Restituisceflash.display3D.textures:VideoTexture |
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — Limite risorse superato: troppi oggetti Texture creati oppure la quantità di memoria allocata alle texture è stata superata.
| |
Error — Creazione texture non riuscita: se il contesto di rendering non riesce a creare l’oggetto Texture (ma non sono disponibili informazioni sulla causa).
|
dispose | () | metodo |
public function dispose(recreate:Boolean = true):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Libera tutte le risorse e l'archiviazione interna associate a questo oggetto Context3D.
Tutti i buffer di indici, buffer di vertici, le texture e i programmi creati mediante questo Context3D vengono rimossi come se venisse chiamato il metodo dispose()
su ciascuno di essi singolarmente. Inoltre, lo stesso oggetto Context3D viene rimosso liberando tutti i buffer temporanei e il back buffer. Se chiamate configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer() o drawToBitmapData() dopo una chiamata di dispose(), il runtime genera un'eccezione.
Avvertenza: se si chiama dispose() su un oggetto Context3D mentre un listener di eventi per Events.CONTEXT3D_CREATE è ancora impostato sull’oggetto Stage3D associato, la chiamata di dispose() simulerà una perdita del dispositivo. Verrà creato un nuovo Context3D sull’oggetto Stage3D e verrà generato di nuovo l’evento Events.CONTEXT3D_CREATE. Se non desiderate questo, potete rimuovere il listener di eventi dall’oggetto Stage3D prima della chiamata dispose() o impostare il parametro recreate su false.
Parametri
recreate:Boolean (default = true )
|
Elementi API correlati
flash.display.Stage3D
drawToBitmapData | () | metodo |
public function drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 3 |
Disegna il buffer di rendering corrente su una bitmap.
Il contenuto corrente del back buffer di rendering viene copiato in un oggetto BitmapData. Si tratta di un'operazione potenzialmente molto lenta, che può richiedere fino a un secondo di tempo. Utilizzatela con attenzione. Tenete presente che questa funzione non copia il front buffer di rendering (quello visualizzato sullo stage) ma il buffer in cui vengono disegnati i dati. Per catturare l'immagine renderizzata non appena appare sullo stage, chiamate drawToBitmapData()
subito dopo aver chiamato present()
.
A partire da AIR 25, sono stati introdotti due nuovi parametri nell'API drawToBitmapData()
. Questa API ora accetta tre parametri. Il primo è il parametro esistente destination:BitmapData
. Il secondo parametro è srcRect:Rectangle
, il rettangolo di destinazione su stage3D. Il terzo parametro è destPoint:Point
, le coordinate sulla bitmap di destinazione. I parametri srcRect e destPoint sono opzionali e predefiniti a (0,0,bitmapWidth,bitmapHeight) e (0,0), rispettivamente.
Quando l'immagine viene disegnata, non viene ridimensionata in base alla bitmap. Il contenuto viene invece ritagliato fino a ottenere le dimensioni della bitmap di destinazione.
Gli oggetti Flash BitmapData memorizzano i colori già moltiplicati per il componente alfa. Ad esempio, se i componenti di colore rgb "puri" di un pixel sono (0x0A, 0x12, 0xBB) e il componente alfa è 0x7F (.5), il pixel viene memorizzato nell'oggetto BitmapData con i seguenti valori rgba: (0x05, 0x09, 0x5D, 0x7F). Potete impostare i valori di fusione in modo tale che i colori renderizzati nel buffer vengano moltiplicati per alfa, oppure potete eseguire l'operazione nello shader dei frammenti. Il contesto di rendering non convalida il fatto che i colori siano memorizzati in formato pre-moltiplicato.
Parametri
destination:BitmapData | |
srcRect:Rectangle (default = null )
| |
destPoint:Point (default = null )
|
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.
| |
Error — 3802: Se uno dei parametri destPoint:Point o srcRect:Rectangle è al di fuori del contorno della coordinata bitmap/stage3D oppure se i valori che non sono un numero (NaN), vengono passati come input.
|
Esempio ( Come utilizzare questo esempio )
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 | () | metodo |
public function drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Eseguite il rendering dei triangoli specificati tramite i buffer e lo stato attuali di questo oggetto Context3D.
Per ogni triangolo, i relativi vertici vengono elaborati dal programma shader di vertici, mentre la superficie del triangolo viene elaborata dal programma shader di pixel. Il colore di output del programma di pixel per ogni pixel viene disegnato nel target di rendering, a seconda delle operazioni dello stencil, del test di profondità, del valore alfa di origine e di destinazione e del metodo di fusione corrente. La destinazione del rendering può essere il buffer di rendering principale oppure una texture.
Se è abilitato il culling, (con il metodo setCulling()
), i triangoli possono essere eliminati dalla scheda prima dell'esecuzione del programma di pixel. Se il testing di profondità e stencil è abilitato, i pixel di output del programma di pixel possono essere eliminati senza aggiornare la destinazione di rendering. Inoltre, il programma di pixel può scegliere di non produrre un colore per un pixel.
I triangoli renderizzati non vengono visualizzati nel riquadro di visualizzazione finché non chiamate il metodo present()
. Dopo ogni chiamata di present()
, il metodo clear()
deve essere chiamato prima della prima chiamata di drawTriangles()
, altrimenti il rendering fallisce.
Quando enableErrorChecking
è false
, questa funzione restituisce immediatamente un valore, non attende i risultati e genera eccezioni solo se questa istanza Context3D è stata eliminata o sono presenti troppe chiamate a draw. Se lo stato del contesto di rendering non è valido, il rendering non viene eseguito senza visualizzare messaggi. Quando la proprietà enableErrorChecking
è true
, questa funzione restituisce un valore dopo che i triangoli sono stati disegnati e genera eccezioni per qualsiasi errore di disegno o stato del contesto non valido.
Parametri
indexBuffer:IndexBuffer3D — Una serie di indici di vertice che fa riferimento ai vertici da renderizzare.
| |
firstIndex:int (default = 0 ) — L'indice del primo indice di vertice selezionato per il rendering. Il valore predefinito è 0.
| |
numTriangles:int (default = -1 ) — Il numero di triangoli di cui eseguire il rendering. Ogni triangolo consuma tre indici. Passate -1 per disegnare tutti i triangoli nel buffer degli indici. Valore predefinito -1.
|
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — Se questo metodo viene chiamato troppe volte tra le chiamate di present() . Il numero massimo di chiamate è 32.768.
Gli errori seguenti vengono generati quando la proprietà | |
Error — È necessario cancellare prima di disegnare: se il buffer non è stato svuotato prima dell'ultima chiamata present() .
| |
Error — Se non è stato impostato un oggetto Program3D valido.
| |
Error — Nessun buffer di indice valido impostato: se non è stato impostato un oggetto IndexBuffer3D valido.
| |
Error — Controllo di validità sui parametri non superato: quando il numero di triangoli da disegnare oppure la proprietà firstIndex superano i valori consentiti.
| |
RangeError — Indici insufficienti in questo buffer: quando il buffer non contiene un numero di indici sufficiente per definire il numero di triangoli da disegnare.
| |
Error — Campionatore associato a una texture che è a sua volta da renderizzare: quando la destinazione del rendering è una texture e tale texture è assegnata a un input di texture del programma di frammenti corrente.
| |
Error — Campionatore associato a una texture non valida: è stata specificata una texture non valida come input del programma di frammenti corrente.
| |
Error — Formato campionatore non corrispondente al formato della texture: quando la texture assegnata come input al programma di frammenti corrente ha un formato diverso da quello specificato per il registro del campionatore. Ad esempio, se una texture 2D è assegnata a un campionatore di texture cubiche.
| |
Error — Campionatore associato a texture non definita: il programma di frammenti corrente accede a un registro texture che non è stato impostato (con setTextureAt() ).
| |
Error — La stessa texture richiede gli stessi parametri del campionatore: se una texture viene utilizzata per più di un registro campionatore, tutti i campionatori devono avere le stesse impostazioni. Ad esempio, non è possibile impostare un campionatore su clamp e un altro su wrap.
| |
Error — Texture associata ma non utilizzata: una texture è impostata come input dello shader ma non è utilizzata.
| |
Error — Flusso non utilizzato: un buffer di vertici è assegnato a un input di attributi di vertice ma il programma di vertici non fa riferimento al registro corrispondente.
| |
Error — Flusso non valido: un oggetto VertexBuffer3D assegnato a un input di un programma di vertici non è un oggetto valido.
| |
RangeError — Il flusso non ha abbastanza vertici: un buffer di vertici che fornisce dati per disegnare i triangoli specificati non ha dati sufficienti.
| |
RangeError — Offset dei vertici del flusso fuori dei limiti: l'offset specificato in una chiamata setVertexBufferAt() è negativo o supera la fine del buffer.
| |
Error — Flusso letto ma non impostato: un attributo di vertice utilizzato dal programma di vertici corrente non è impostato (con setVertexBufferAt() ).
|
Elementi API correlati
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Esempio ( Come utilizzare questo esempio )
I triangoli vengono definiti utilizzando il buffer di vertici e il buffer di indici. Il buffer di vertici contiene le informazioni sulla posizione e sul colore per ogni vertice del triangolo. Il buffer di indici contiene gli indici del buffer di vertici. Tre indici definiscono un triangolo. Un triangolo costituito ad esempio dai primi tre punti del buffer di vertici viene elencato come 0,1,2 nel buffer di indici.
In questo semplice esempio non vengono eseguite trasformazioni 3D. Solo gli oggetti nell'area di visualizzazione canonica (volume di unità 2x2x1) possono essere visualizzati e le coordinate dei triangoli sono definite all'interno di quest'area. Tuttavia, per il rendering di una tipica scena 3D, dovete progettare gli oggetti da renderizzare dal sistema di coordinate "mondiale" in quest'area di visualizzazione utilizzando una proiezione ortografica o prospettica.
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 | () | metodo |
public function drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 20.0 |
Eseguite il rendering delle istanze dei triangoli specificate tramite i buffer e lo stato attuali di questo oggetto Context3D.
Per ogni triangolo di questa istanza, i relativi vertici vengono elaborati dal programma shader di vertici, mentre la superficie del triangolo viene elaborata dal programma shader di pixel. Il colore di output del programma di pixel per ogni pixel viene disegnato nel target di rendering, a seconda delle operazioni dello stencil, del test di profondità, del valore alfa di origine e di destinazione e del metodo di fusione corrente. La destinazione del rendering può essere il buffer di rendering principale oppure una texture.
Se è abilitato il culling, (con il metodo setCulling()
), i triangoli possono essere eliminati dalla scheda prima dell'esecuzione del programma di pixel. Se il testing di profondità e stencil è abilitato, i pixel di output del programma di pixel possono essere eliminati senza aggiornare la destinazione di rendering. Inoltre, il programma di pixel può scegliere di non produrre un colore per un pixel.
Le istanze dei triangoli reindirizzati non vengono visualizzate nel riquadro di visualizzazione finché non viene chiamato il metodo present()
. Dopo ogni chiamata present()
, il metodo clear()
deve essere chiamato prima della prima chiamata drawTrianglesInstanced()
o il rendering fallisce.
Quando enableErrorChecking
è false
, questa funzione restituisce immediatamente un valore, non attende i risultati e genera eccezioni solo se questa istanza Context3D è stata eliminata o sono presenti troppe chiamate a draw. Se lo stato del contesto di rendering non è valido, il rendering non viene eseguito senza visualizzare messaggi. Quando la proprietà enableErrorChecking
è true
, questa funzione restituisce un valore dopo che i triangoli sono stati disegnati e genera eccezioni per qualsiasi errore di disegno o stato del contesto non valido.
Questo metodo potrebbe generare un'eccezione se il buffer con istanza viene ordinato in modo errato con SetVertexAt()
. Con Direct 3D 9, ad esempio, i dati indicizzati della geometria e il numero di istanze da disegnare deve essere sempre impostato nel flusso zero con API SetStreamSourceFreq()
.
Ciò significa che il buffer di vertici creati con CreateVertexBufferForInstance()
non deve essere inserito con il numero di indice minimo una volta impostato SetVertexBufferAt()
come input per il programma shader di vertici. Il buffer di vertici generato mediante CreateVertexBuffer()
deve essere inserito con un numero di indice minore rispetto a quello per CreateVertexBufferForInstance ()
. I dati geometrici devono essere inseriti in genere prima dei dati per-istanza con SetVertexBufferAt()
.
Parametri
indexBuffer:IndexBuffer3D — Una serie di indici di vertice che fa riferimento ai vertici da renderizzare.
| |
numInstances:int — numero di istanze di cui eseguire il rendering.
| |
firstIndex:int (default = 0 ) — L'indice del primo indice di vertice selezionato per il rendering. Il valore predefinito è 0.
| |
numTriangles:int (default = -1 ) — Il numero di triangoli di cui eseguire il rendering. Ogni triangolo consuma tre indici. Passate -1 per disegnare tutti i triangoli nel buffer degli indici. Valore predefinito -1.
|
Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
| |
Error — Se questo metodo viene chiamato troppe volte tra le chiamate di present() . Il numero massimo di chiamate è 32.768.
| |
Error — Richiede profilo esteso standard o superiore: se questo metodo è utilizzato quando il profilo richiesto è inferiore al profilo esteso standard.
| |
Error — Se questo metodo viene chiamato con numInstances negative.
Gli errori seguenti vengono generati quando la proprietà | |
Error — È necessario cancellare prima di disegnare: se il buffer non è stato svuotato prima dell'ultima chiamata present() .
| |
Error — Se non è stato impostato un oggetto Program3D valido.
| |
Error — Nessun buffer di indice valido impostato: se non è stato impostato un oggetto IndexBuffer3D valido.
| |
Error — Controllo di validità sui parametri non superato: quando il numero di triangoli da disegnare oppure la proprietà firstIndex superano i valori consentiti.
| |
RangeError — Indici insufficienti in questo buffer: quando il buffer non contiene un numero di indici sufficiente per definire il numero di triangoli da disegnare.
| |
Error — Campionatore associato a una texture che è a sua volta da renderizzare: quando la destinazione del rendering è una texture e tale texture è assegnata a un input di texture del programma di frammenti corrente.
| |
Error — Campionatore associato a una texture non valida: è stata specificata una texture non valida come input del programma di frammenti corrente.
| |
Error — Formato campionatore non corrispondente al formato della texture: quando la texture assegnata come input al programma di frammenti corrente ha un formato diverso da quello specificato per il registro del campionatore. Ad esempio, se una texture 2D è assegnata a un campionatore di texture cubiche.
| |
Error — Campionatore associato a texture non definita: il programma di frammenti corrente accede a un registro texture che non è stato impostato (con setTextureAt() ).
| |
Error — La stessa texture richiede gli stessi parametri del campionatore: se una texture viene utilizzata per più di un registro campionatore, tutti i campionatori devono avere le stesse impostazioni. Ad esempio, non è possibile impostare un campionatore su clamp e un altro su wrap.
| |
Error — Texture associata ma non utilizzata: una texture è impostata come input dello shader ma non è utilizzata.
| |
Error — Flusso non utilizzato: un buffer di vertici è assegnato a un input di attributi di vertice ma il programma di vertici non fa riferimento al registro corrispondente.
| |
Error — Flusso non valido: un oggetto VertexBuffer3D assegnato a un input di un programma di vertici non è un oggetto valido.
| |
RangeError — Il flusso non ha abbastanza vertici: un buffer di vertici che fornisce dati per disegnare i triangoli specificati non ha dati sufficienti.
| |
RangeError — Offset dei vertici del flusso fuori dei limiti: l'offset specificato in una chiamata setVertexBufferAt() è negativo o supera la fine del buffer.
| |
Error — Flusso letto ma non impostato: un attributo di vertice utilizzato dal programma di vertici corrente non è impostato (con setVertexBufferAt() ).
| |
Error — Il flusso del buffer di vertici non contiene un numero sufficiente di elementi per le istanze: se un flusso del buffer di vertici non contiene abbastanza voci per il numero di istanze.
| |
Error — Il flusso del buffer di vertici per le istanze non è impostato correttamente con il registro attributi di indice minimo: se al buffer di vertici generato usando CreateVertexBuffer() viene assegnato un numero di indice più grande di quello per il buffer di vertici generato utilizzando CreateVertexBufferForInstance() .
|
Elementi API correlati
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Esempio ( Come utilizzare questo esempio )
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 | () | metodo |
public function present():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Visualizza il back buffer di rendering.
Una chiamata del metodo present()
rende visibili i risultati di tutte le operazioni di rendering eseguite dall'ultima chiamata present()
e inizia un nuovo ciclo di rendering. Dopo aver chiamato present
, dovete chiamare clear()
prima di eseguire una nuova chiamata drawTriangles()
. In caso contrario, questa funzione svuota in modo alternato il buffer di rendering su giallo e verde oppure, se enableErrorChecking
è stato impostato su true
, viene generata un'eccezione.
Una chiamata present()
inoltre ripristina la destinazione del rendering, analogamente a una chiamata setRenderToBackBuffer()
.
Genera
Error — È necessario cancellare prima di disegnare: se clear() non è stato chiamato prima della chiamata precedente di present() . (Due chiamate present() consecutive non sono consentite senza una chiamata clear() tra una e l'altra.)
| |
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.
|
setBlendFactors | () | metodo |
public function setBlendFactors(sourceFactor:String, destinationFactor:String):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Specifica i fattori utilizzati per fondere il colore di output di un'operazione di disegno con il colore esistente.
Il colore di output (di origine) del programma shader di pixel viene combinato con il colore esistente (di destinazione) di tale pixel, in base alla seguente formula:
result color = (source color * sourceFactor) + (destination color * destinationFactor)
Il colore di destinazione corrisponde al colore corrente nel buffer di rendering per tale pixel. Di conseguenza, è il risultato della chiamata clear()
più recente e di eventuali chiamate drawTriangles()
intervenute.
Utilizzate setBlendFactors()
per impostare i fattori utilizzati per moltiplicare i colori di origine e di destinazione prima che vengano sommati insieme. I fattori di fusione predefiniti sono sourceFactor = Context3DBlendFactor.ONE
e destinationFactor = Context3DBlendFactor.ZERO
, che porta alla sovrascrittura del colore di destinazione da parte del colore di origine (in altre parole, non avviene alcuna fusione dei due colori). Per una normale fusione alfa, usate sourceFactor = Context3DBlendFactor.SOURCE_ALPHA
e destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA
.
Utilizzate le costanti definite nella classe Context3DBlendFactor per impostare i parametri di questa funzione.
Parametri
sourceFactor:String — Il fattore per cui moltiplicare il colore di origine. L'impostazione predefinita è Context3DBlendFactor.ONE .
| |
destinationFactor:String — Il fattore per cui moltiplicare il colore di destinazione. L'impostazione predefinita è Context3DBlendFactor.ZERO .
|
Genera
Error — Enumerazione non valida: se sourceFactor o destinationFactor non è uno dei valori riconosciuti, definiti nella classe Context3DBlendFactor.
|
Elementi API correlati
Esempio ( Come utilizzare questo esempio )
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 | () | metodo |
public function setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta la maschera utilizzata per la scrittura dei colori nel buffer di rendering.
Solo i componenti dei colori per i quali il parametro della maschera colore corrispondente è true
vengono aggiornati quando un colore viene scritto nel buffer di rendering. Ad esempio, se effettuate una chiamata a setColorMask( true, false, false, false )
, solo il componente rosso di un colore viene scritto nel buffer, fino a quando la maschera colore non viene nuovamente modificata. La maschera colore non influenza il comportamento del metodo clear()
.
Parametri
red:Boolean — Impostate false per bloccare le modifiche al canale rosso.
| |
green:Boolean — Impostate false per bloccare le modifiche al canale verde.
| |
blue:Boolean — Impostate false per bloccare le modifiche al canale blu.
| |
alpha:Boolean — Impostate false per bloccare le modifiche al canale alfa.
|
Esempio ( Come utilizzare questo esempio )
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 | () | metodo |
public function setCulling(triangleFaceToCull:String):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta la modalità di culling dei triangoli.
I triangoli possono essere esclusi dalla scena in una fase iniziale del processo di rendering in base al loro orientamento rispetto al piano di visualizzazione. Per assicurare un culling corretto, specificate l'ordine dei vertici in modo coerente (in senso orario o antiorario) così come osservato dall'esterno del modello.
Parametri
triangleFaceToCull:String — La modalità di culling. Utilizzate una delle costanti definite nella classe Context3DTriangleFace.
|
Genera
Error — Enumerazione non valida: quando triangleFaceToCull non è uno dei valori definiti nella classe Context3DTriangleFace.
|
Elementi API correlati
setDepthTest | () | metodo |
public function setDepthTest(depthMask:Boolean, passCompareMode:String):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta il tipo di confronto utilizzato per il test di profondità.
La profondità di output del pixel di origine dal programma shader di pixel viene confrontata con il valore corrente nel buffer della profondità. Se il confronto risulta false
, il pixel di origine viene scartato. Se risulta true
, il pixel di origine viene elaborato nel passaggio successivo della pipeline di rendering, ovvero il test di stencil. Inoltre, il buffer della profondità viene aggiornato con la profondità del pixel di origine, fintanto che il parametro depthMask
è impostato su true
.
Imposta i test utilizzati per confrontare i valori di profondità dei pixel di origine e di destinazione. Il pixel di origine viene composto con il pixel di destinazione quando il confronto è true. L'operatore di confronto viene applicato come operatore infix tra i valori dei pixel di origine e di destinazione, in tale ordine.
Parametri
depthMask:Boolean — Il valore di profondità di destinazione sarà aggiornato dal pixel di origine se è true.
| |
passCompareMode:String — L'operazione di test di confronto delle profondità. Uno dei valori di Context3DCompareMode.
|
Elementi API correlati
setFillMode | () | metodo |
public function setFillMode(fillMode:String):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 16 |
Imposta la modalità di riempimento usata per il rendering. L'interfaccia è disponibile solo in AIR Desktop.
Parametri
fillMode:String — se il valore è WIREFRAME, l'oggetto viene visualizzato in una trama di linee. se il valore è SOLID, l'oggetto viene visualizzato come poligoni in tinta unita con ombra.
|
Elementi API correlati
setProgram | () | metodo |
public function setProgram(program:Program3D):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta i programmi shader di vertici e di frammenti da utilizzare per il successivo rendering.
Parametri
program:Program3D — L'oggetto Program3D che rappresenta i programmi di vertici e di frammenti da utilizzare.
|
Elementi API correlati
Esempio ( Come utilizzare questo esempio )
renderContext
, è un'istanza della classe Context3D. I programmi contenuti nell'esempio sono scritti nel linguaggio 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 | () | metodo |
public function setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.1, AIR 3.1 |
Imposta le costanti da impiegare nei programmi shader che utilizzano i valori memorizzati in un oggetto ByteArray
.
Imposta costanti alle quali è possibile accedere dal programma di vertici o di frammenti.
Parametri
programType:String — Uno dei valori Context3DTriangleFace.
| |
firstRegister:int — L'indice della prima costante di programma shader da impostare.
| |
numRegisters:int — Il numero di registri da impostare. Ogni registro viene letto come quattro valori a virgola mobile.
| |
data:ByteArray — L'oggetto ByteArray di origine.
| |
byteArrayOffset:uint — Un offset nel ByteArray da leggere.
|
Genera
TypeError — kNullPointerError quando data è null.
| |
RangeError — kConstantRegisterOutOfBounds quando si tenta di impostare più del numero massimo di costanti shader.
| |
RangeError — kBadInputSize se byteArrayOffset è maggiore o uguale alla lunghezza di data o no. di elementi in data - byteArrayOffset è inferiore a numRegisters *16
|
Elementi API correlati
setProgramConstantsFromMatrix | () | metodo |
public function setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta le costanti da impiegare nei programmi shader che utilizzano i valori memorizzati in un oggetto Matrix3D
.
Utilizzate questa funzione per passare una matrice a un programma shader. La funzione imposta 4 registri di costanti utilizzati dal programma di vertici o di frammenti. La matrice viene assegnata ai registri riga per riga. Il primo registro di costanti è assegnato alla prima riga della matrice. È possibile impostare 128 registri per un programma di vertici e 28 per un programma di frammenti.
Parametri
programType:String — Il tipo di programma shader, Context3DProgramType.VERTEX o Context3DProgramType.FRAGMENT .
| |
firstRegister:int — L'indice del primo registro costanti da impostare. Poiché un oggetto Matrix3D ha 16 valori, vengono impostati quattro registri.
| |
matrix:Matrix3D — La matrice che contiene i valori delle costanti.
| |
transposedMatrix:Boolean (default = false ) — Se è true , le voci della matrice vengono copiate nei registri in un ordine trasposto. Il valore predefinito è false .
|
Genera
TypeError — Puntatore nullo: quando matrix è null.
| |
RangeError — Registro costanti fuori dei limiti: quando si tenta di impostare un numero di registri costanti shader superiore al massimo consentito.
|
Altre informazioni
Elementi API correlati
setProgramConstantsFromVector | () | metodo |
public function setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta gli input di costanti per i programmi shader.
Imposta un array di costanti alle quali è possibile accedere da un programma di vertici o di frammenti. L'accesso alle costanti impostate in Program3D avviene nei programmi shader tramite registri di costanti. Ogni registro di costanti è composto da 4 valori a virgola mobile (x, y, z, w). Pertanto ogni registro richiede 4 voci nell'oggetto Vector di dati. Il numero di registri che è possibile impostare per il programma di vertici e il programma di frammenti dipende da Context3DProfile
.
Parametri
programType:String — Il tipo di programma shader, Context3DProgramType.VERTEX o Context3DProgramType.FRAGMENT .
| |
firstRegister:int — L'indice del primo registro costanti da impostare.
| |
data:Vector.<Number> — I valori delle costanti a virgola mobile. Devono essere presenti almeno quattro elementi numRegisters in data .
| |
numRegisters:int (default = -1 ) — Il numero di costanti da impostare. Specificate -1, il valore predefinito, per impostare un numero di registri sufficiente per utilizzare tutti i dati disponibili.
|
Genera
TypeError — Puntatore nullo: quando matrix è null .
| |
RangeError — Registro costanti fuori dei limiti: quando si tenta di impostare un numero di registri costanti shader superiore al massimo consentito.
| |
RangeError — Dimensione di input errata: quando il numero di elementi in data è inferiore a numRegisters *4
|
Altre informazioni
Elementi API correlati
setRenderToBackBuffer | () | metodo |
public function setRenderToBackBuffer():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta il back buffer di rendering come destinazione di rendering. Le successive chiamate dei metodi drawTriangles()
e clear()
determinano l'aggiornamento del back buffer. Utilizzate questo metodo per riprendere il normale rendering dopo aver usato il metodo setRenderToTexture()
.
setRenderToTexture | () | metodo |
public function setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta la texture specificata come destinazione di rendering.
Le successive chiamate dei metodi drawTriangles()
e clear()
determinano l'aggiornamento della texture specificata anziché del back buffer. Le mip map vengono create automaticamente. Utilizzate setRenderToBackBuffer()
per riprendere il normale rendering sul back buffer.
Non è necessario cancellare prima di disegnare. Se non si effettuano operazioni di cancellazione, il contenuto di rendering viene mantenuto. Non verranno cancellati nemmeno il buffer della profondità e il buffer di stencil. La cancellazione viene tuttavia forzata al primo disegno. Una chiamata present()
reimposta la destinazione sul back buffer.
Parametri
texture:flash.display3D.textures:TextureBase — La texture di destinazione su cui eseguire il rendering. Impostate questa proprietà su null per riprendere il rendering sul back buffer (anche setRenderToBackBuffer() e present reimpostano la destinazione sul back buffer).
| |
enableDepthAndStencil:Boolean (default = false ) — Se è true , sono disponibili i test di profondità e stencil. Se è false , ogni stato di profondità e di stencil viene ignorato per le successive operazioni di disegno.
| |
antiAlias:int (default = 0 ) — La qualità dell'antialiasing. Utilizzate 0 per disattivare l'antialiasing; valori maggiori migliorano la qualità dell'antialiasing ma richiedono ulteriori calcoli. Il valore viene ignorato dalla piattaforma mobile e dal contesto di rendering software.
| |
surfaceSelector:int (default = 0 ) — Specifica quale elemento della texture deve essere aggiornato. Gli oggetti texture hanno una sola superficie, quindi dovete specificare 0, il valore predefinito. Gli oggetti CubeTexture hanno sei superfici, quindi potete specificare un numero intero da 0 a 5.
| |
colorOutputIndex:int (default = 0 ) — Il registro del colore di output. Deve essere 0 per la modalità vincolata o linea di base. In caso contrario specifica il registro del colore di output.
|
Genera
ArgumentError — Per un parametro surfaceSelector non corrispondente. Il valore deve essere 0 per le texture 2D e 0...5 per le mappe cubiche.
| |
ArgumentError — texture non è derivato dalla classe base TextureBase (classi Texture o CubeTexture).
| |
ArgumentError — colorOutputIndex deve essere un intero tra 0 e 3.
| |
ArgumentError — questa chiamata richiede un Context3D creato con il profilo standard o superiore.
|
Elementi API correlati
setSamplerStateAt | () | metodo |
public function setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.6, AIR 3.6 |
Sostituisce manualmente lo stato del campionatore di texture.
Lo stato del campionamento di texture è impostato sull’ora di chiamata di setProgram
. Tuttavia, potete eseguire l’override dello stato del campionatore di texture con questa funzione. Se non desiderate che il programma modifichi lo stato del campionatore, impostate il bit ignoresampler
in AGAL e utilizzate questa funzione.
Parametri
sampler:int — sampler Il registro campionatore da utilizzare. Crea una mappatura con il registro campionatore in AGAL.
| |
wrap:String — Modalità wrapping. Definita in Context3DWrapMode . Il valore predefinito è repeat.
| |
filter:String — Modalità di filtraggio texture. Definita in Context3DTextureFilter . Il valore predefinito è nearest.
| |
mipfilter:String — Filtro mip map. Definito in Context3DMipFilter . Il valore predefinito è none.
|
Genera
Error — Campionatore fuori intervallo
| |
Error — wrap, filter, mipfilter bad enum
| |
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell’hardware di rendering sottostante.
|
Elementi API correlati
setScissorRectangle | () | metodo |
public function setScissorRectangle(rectangle:Rectangle):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta un rettangolo scissor, che è un tipo di maschera di disegno. Il renderer disegna soltanto l'area interna al rettangolo scissor. Il scissoring non ha effetto sulle operazioni di cancellazione.
Passate null
per disattivare lo scissoring.
Parametri
rectangle:Rectangle — Il rettangolo nel quale disegnare. Specificate la posizione del rettangolo e le dimensioni in pixel. L'origine del sistema di coordinate è l'angolo superiore sinistro del riquadro di visualizzazione; i valori positivi determinano l'incremento verso il basso e verso destra (come nel normale sistema di coordinate della visualizzazione in Flash).
|
Esempio ( Come utilizzare questo esempio )
I triangoli vengono definiti utilizzando il buffer di vertici e il buffer di indici. Il buffer di vertici contiene le informazioni sulla posizione e sul colore per ogni vertice del triangolo. Il buffer di indici contiene gli indici del buffer di vertici. Tre indici definiscono un triangolo. Un triangolo costituito ad esempio dai primi tre punti del buffer di vertici viene elencato come 0,1,2 nel buffer di indici.
In questo semplice esempio non vengono eseguite trasformazioni 3D. Vengono visualizzati solo gli oggetti all'interno dell'area di visualizzazione canonica (un volume cubico di 2x2x2 centrato nell'origine). Tuttavia, per il rendering di una tipica scena 3D, dovete progettare gli oggetti da riprodurre in questa area di visualizzazione utilizzando una proiezione ortografica o prospettica.
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 | () | metodo |
public function setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta l'operazione e la modalità stencil.
Un valore di riferimento stencil a 8 bit può essere associato a ciascuna chiamata di disegno. Durante il rendering, il valore di riferimento può essere testato con i valori memorizzati in precedenza nel buffer dei fotogrammi. Il risultato del test può controllare l'azione di disegno e determinare se o come il valore di stencil memorizzato viene aggiornato. Inoltre, i test di profondità controllano se il test di stencil viene eseguito. Un test di profondità fallito può anche essere utilizzato per controllare l'azione eseguita sul buffer di stencil.
Nel processo di elaborazione dei pixel, il test di profondità viene eseguito per primo. Se il test di profondità fallisce, è possibile eseguire un'azione di aggiornamento del buffer di stencil, ma non è possibile effettuare nessuna ulteriore valutazione del buffer di stencil. Se il test di profondità ha esito positivo, viene eseguito il test di stencil. Azioni alternative possono essere eseguite a seconda del risultato del test di stencil.
Il valore di riferimento stencil viene impostato utilizzando setStencilReferenceValue()
.
Parametri
triangleFace:String (default = "frontAndBack ") — Gli orientamenti del triangolo consentiti per contribuire all'operazione stencil. Uno dei valori Context3DTriangleFace.
| |
compareMode:String (default = "always ") — L'operatore di test utilizzato per confrontare il valore di riferimento stencil corrente e il valore di stencil del pixel di destinazione. L'aggiornamento del colore e della profondità del pixel di destinazione viene eseguito quando il risultato del confronto è true. Le azioni di stencil vengono eseguite nel modo richiesto nei parametri di azione seguenti. L'operatore di confronto viene applicato come operatore infix tra i valori di riferimento corrente e di destinazione, in tale ordine (in pseudocodice: if stencilReference OPERATOR stencilbuffer then pass ). Utilizzate una delle costanti definite nella classe Context3DCompareMode.
| |
actionOnBothPass:String (default = "keep ") — L'azione da eseguire quando sia il confronto di profondità che il confronto di stencil hanno esito positivo. Utilizzate una delle costanti definite nella classe Context3DStencilAction.
| |
actionOnDepthFail:String (default = "keep ") — L'azione da eseguire quando i confronti di profondità hanno esito negativo. Utilizzate una delle costanti definite nella classe Context3DStencilAction.
| |
actionOnDepthPassStencilFail:String (default = "keep ") — L'azione da eseguire quando i confronti di profondità hanno esito positivo e il confronto di stencil ha esito negativo. Utilizzate una delle costanti definite nella classe Context3DStencilAction.
|
Genera
Error — Enumerazione non valida: quando triangleFace non è uno dei valori definiti nella classe Context3DTriangleFace.
| |
Error — Enumerazione non valida: quando compareMode non è uno dei valori definiti nella classe Context3DCompareMode.
| |
Error — Enumerazione non valida: quando actionOnBothPass , actionOnDepthFail o actionOnDepthPassStencilFail non è uno dei valori definiti nella classe Context3DStencilAction.
|
Elementi API correlati
Esempio ( Come utilizzare questo esempio )
- Azzera il buffer di stencil.
- Imposta l'azione stencil da incrementare quando il test stencil viene superato.
- Impostate il valore di riferimento stencil su 0.
- Disegna la maschera triangolare. Ovunque venga disegnato il triangolo, il test stencil viene superato perché il buffer di stencil è stato azzerato e il valore di riferimento è 0. Di conseguenza, il buffer di stencil viene incrementato a 1 dove viene disegnata la maschera del triangolo.
- Cambia l'azione stencil da mantenere in modo tale che le operazioni di disegno successive non modifichino il buffer di stencil.
- Disegna un rettangolo a schermo intero (multicolore). Poiché il valore di riferimento stencil è ancora 0, il test stencil fallisce nell'area mascherata. Quindi, il rettangolo viene disegnato ovunque tranne che nell'area mascherata.
- Cambia il valore di riferimento stencil in 1.
- Disegna un altro rettangolo a schermo intero (rosso). Ora il test stencil fallisce ovunque tranne che nell'area mascherata, che è stata incrementata a 1. Così il rettangolo viene disegnato solo nell'area mascherata.
Passate il mouse sopra l'esempio per vedere i passaggi principali in sequenza.
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 | () | metodo |
public function setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Imposta il valore di confronto stencil utilizzato per il test di stencil.
Vengono utilizzati solo gli 8 bit inferiori del valore di riferimento. Anche il valore del buffer di stencil è lungo 8 bit. Utilizzate readMask
e writeMask
per usare il buffer di stencil come campo bit.
Parametri
referenceValue:uint — Un valore di riferimento a 8 bit utilizzato nei testi di confronto dei valori di riferimento.
| |
readMask:uint (default = 255 ) — Una maschera da 8 bit da applicare sia al valore del buffer di stencil corrente che al valore di riferimento prima del confronto.
| |
writeMask:uint (default = 255 ) — Una maschera da 8 bit applicata al valore di riferimento prima di aggiornare il buffer di stencil.
|
Elementi API correlati
setTextureAt | () | metodo |
public function setTextureAt(sampler:int, texture:flash.display3D.textures:TextureBase):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Specifica la texture da utilizzare per un registro di input texture di un programma di frammenti.
Un programma di frammenti è in grado di leggere informazioni da un numero massimo di otto oggetti texture. Utilizzate questa funzione per assegnare un oggetto Texture o CubeTexture a uno dei registri campionatore utilizzati dal programma di frammenti.
Nota: se cambiate il programma di frammenti attivo (con setProgram
) con uno shader che utilizza meno texture, impostate i registri inutilizzati su null
:
setTextureAt( 7, null );
Parametri
sampler:int — L'indice del registro campionatore, un valore da 0 a 7.
| |
texture:flash.display3D.textures:TextureBase — L'oggetto texture da rendere disponibile: un'istanza Texture o CubeTexture.
|
Altre informazioni
Elementi API correlati
CubeTexture
setVertexBufferAt | () | metodo |
public function setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3 |
Specifica quali componenti dati di vertice corrispondono a un singolo input di programma shader di vertici.
Utilizzate il metodo setVertexBufferAt
per identificare quali componenti dei dati definiti per ciascun vertice di un buffer VertexBuffer3D appartengono a quali input del programma di vertici. Lo sviluppatore del programma di vertici determina quanti dati sono necessari per ciascun vertice. Tali dati vengono mappati da uno o più flussi VertexBuffer3D
ai registri attributi del programma shader di vertici.
L'unità di dati più piccola consumata dallo shader di vertici è un dato di 32 bit. Gli offset nel flusso di vertici vengono specificati sotto forma di multipli di 32 bit.
Ad esempio, un programmatore potrebbe definire ciascun vertice con i dati seguenti:position: x float32 y float32 z float32 color: r unsigned byte g unsigned byte b unsigned byte a unsigned byteIpotizzando che il vertice sia stato definito in un unico oggetto VertexBuffer3D denominato
buffer
, verrebbe assegnato a uno shader di vertici con il codice seguente:
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
Parametri
index:int — L'indice del registro attributi nello shader di vertici (da 0 a 7).
| |
buffer:VertexBuffer3D — Il buffer che contiene i dati di vertice di origine da fornire allo shader di vertici.
| |
bufferOffset:int (default = 0 ) — Un offset dall'inizio dei dati per un singolo vertice in corrispondenza del quale deve iniziare la lettura di questo attributo. Nell'esempio riportato sopra, i dati di posizione hanno un offset pari a 0 perché si tratta del primo attributo; il colore ha un offset 3 perché l'attributo color segue i tre valori di posizione a 32 bit. L'offset viene specificato in unità da 32 bit.
| |
format:String (default = "float4 ") — Un valore della classe Context3DVertexBufferFormat che specifica il tipo di dati di questo attributo.
|
Genera
Error — Enumerazione non valida: quando il formato non è uno dei valori definiti nella classe Context3DVertexBufferFormat.
| |
RangeError — Registro attributi fuori dei limiti: quando il parametro index è fuori dell'intervallo da 0 a 7. (Uno shader può utilizzare un massimo di otto registri attributi di vertice.)
|
Altre informazioni
Elementi API correlati
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, 02:44 PM Z