Paket | flash.display3D |
Klasse | public final class Context3D |
Vererbung | Context3D EventDispatcher Object |
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Ein Renderingkontext beinhaltet eine Zeichenoberfläche und deren zugeordnete Ressourcen und Zustände. Der Renderingkontext verwendet nach Möglichkeit die Hardware-GPU (Grafikprozessor). Andernfalls verwendet der Renderingkontext Software. (Wenn das Rendering durch Context3D auf einer Plattform nicht unterstützt wird, enthält die stage3Ds
-Eigenschaft des Stage-Objekts eine leere Liste.)
Der Context3D-Renderingkontext ist eine programmierbare Pipeline, die große Ähnlichkeit mit OpenGL ES 2 hat, allerdings abstrahiert ist, sodass sie mit einer Reihe von Hardware- und GPU-Schnittstellen vergleichbar ist. Obwohl sie für 3D-Grafiken entwickelt wurde, schreibt die Renderingpipeline nicht vor, dass das Rendering dreidimensional ist. Deshalb können Sie einen 2D-Renderer erstellen, indem Sie die entsprechenden Vertex- und Pixelfragmentprogramme bereitstellen. Sowohl für 3D als auch 2D wird als einzige geometrische Grundform das Dreieck unterstützt.
Ruft eine Instanz der Context3D-Klasse ab, indem die requestContext3D()
-Methode eines Stage3D-Objekts aufgerufen wird. Eine begrenzte Anzahl von Context3D-Objekten kann pro Bühne vorhanden sein; eine für jedes Stage3D-Objekt in der Stage.stage3Ds
-Liste. Wenn der Kontext erstellt wird, setze das Stage3D-Objekt ein context3DCreate
-Ereignis ab. Ein Renderingkontext kann jederzeit zerstört und neu erstellt werden, zum Beispiel wenn eine andere Anwendung, die die GPU verwendet, den Fokus erhält. Sie sollten den Empfang mehrerer context3DCreate
-Ereignisse einkalkulieren. Positionieren Sie den Renderbereich auf der Bühne, indem Sie die x
- und y
-Eigenschaften der zugeordneten Stage3D-Instanz verwenden.
Zum Rendern und Anzeigen einer Szene (nach dem Abrufen eines Context3D-Objekts) sind die folgenden Schritte typisch:
- Konfigurieren Sie die Attribute des Hauptanzeigepuffers durch den Aufruf von
configureBackBuffer()
. - Erstellen und initialisieren Sie Ihre Renderingressourcen, darunter:
- Vertex- und Indexpuffer, die die Szenengeometrie definieren
- Vertex- und Pixelprogramme (Shader) zum Rendern der Szene
- Texturen
- Rendern eines Bildes:
- Legen Sie den Renderzustand für ein Objekt oder eine Gruppe von Objekten in der Szene fest.
- Rufen Sie die
drawTriangles()
-Methode auf, um eine Gruppe von Dreiecken zu rendern. - Ändern Sie den Renderingzustand für die nächste Gruppe von Objekten.
- Rufen Sie
drawTriangles()
auf, um Dreiecke zu zeichnen, die die Objekte definieren. - Wiederholen Sie den Vorgang, bis die gesamte Szene gerendert wurde.
- Rufen Sie die
present()
-Methode auf, um die gerenderte Szene auf der Bühne anzuzeigen.
Für das Rendering gelten die folgenden Einschränkungen:
Ressourceneinschränkungen:
Ressource | Zulässige Anzahl | Gesamtspeicher |
---|---|---|
Vertexbuffer
| 4096 | 256 MB |
Indexbuffer
| 4096 | 128 MB |
Programme
| 4096 | 16 MB |
Texturen
| 4096 | 128 MB |
Würfeltexturen
| 4096 | 256 MB |
AGAL-Limits: 200 Opcodes pro Programm.
Zeichenaufruf-Limits: 32.768 Aufrufe von drawTriangles()
für jeden present()
-Aufruf.
Für Texturen gelten die folgenden Einschränkungen:
Texturenbeschränkungen für AIR 32-Bit:
Texture | Maximale Größe | GPU-Gesamtspeicher |
---|---|---|
Normale Textur (unterhalb der erweiterten Baseline)
| 2048 x 2048 | 512 MB |
Normale Textur (erweiterte Baseline und darüber)
| 4096 x 4096 | 512 MB |
Rechteckige Textur (unterhalb der erweiterten Baseline)
| 2048 x 2048 | 512 MB |
Rechteckige Textur (erweiterte Baseline und darüber)
| 4096 x 4096 | 512 MB |
Würfeltextur
| 1024 x 1024 | 256 MB |
Texturenbeschränkungen für AIR 64-Bit (Desktop):
Texture | Maximale Größe | GPU-Gesamtspeicher |
---|---|---|
Normale Textur (unterhalb der erweiterten Baseline)
| 2048 x 2048 | 512 MB |
Normale Textur (erweiterte Baseline bis Standard)
| 4096 x 4096 | 512 MB |
Normale Textur (Standard erweitert und darüber)
| 4096 x 4096 | 2048 MB |
Rechteckige Textur (unterhalb der erweiterten Baseline)
| 2048 x 2048 | 512 MB |
Rechteckige Textur (erweiterte Baseline bis Standard)
| 4096 x 4096 | 512 MB |
Rechteckige Textur (Standard erweitert und darüber)
| 4096 x 4096 | 2048 MB |
Würfeltextur
| 1024 x 1024 | 256 MB |
512 MB ist das absolute Limit für Texturen, einschließlich des Texturspeichers, der für Mipmaps benötigt wird. Für Würfeltexturen beträgt die maximale Speicherkapazität hingegen 256 MB.
Sie können Context3D-Objekte nicht mit dem Context3D-Konstruktor erstellen. Es wird als Eigenschaft einer Stage3D-Instanz konstruiert und ist als solche verfügbar. Die Context3D-Klasse kann sowohl auf Desktop- als auch auf mobilen Plattformen verwendet werden; dies gilt für die Ausführung in Flash Player und in AIR.
Verwandte API-Elemente
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
Eigenschaft | Definiert von | ||
---|---|---|---|
backBufferHeight : int [schreibgeschützt]
Gibt die Höhe des Hintergrundpuffers an. Dies kann durch einen erfolgreichen Aufruf der configureBackBuffer()-Methode geändert werden. | Context3D | ||
backBufferWidth : int [schreibgeschützt]
Gibt die Breite des Hintergrundpuffers an. Dies kann durch einen erfolgreichen Aufruf der configureBackBuffer()-Methode geändert werden. | Context3D | ||
constructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz. | Object | ||
driverInfo : String [schreibgeschützt]
Der Typ des Grafikbibliothekstreibers, der von diesem Renderingkontext verwendet wird. | Context3D | ||
enableErrorChecking : Boolean
Gibt an, ob vom Renderer gefundene Fehler der Anwendung gemeldet werden. | Context3D | ||
maxBackBufferHeight : int
Legt die maximale Höhe des Hintergrundpuffers fest. | Context3D | ||
maxBackBufferWidth : int
Gibt die maximale Breite des Hintergrundpuffers an. | Context3D | ||
profile : String [schreibgeschützt]
Das funktionsunterstützte Profil wird von diesem Context3D-Objekt verwendet. | Context3D | ||
supportsVideoTexture : Boolean [statisch] [schreibgeschützt]
Gibt an, ob Context3D Videotextur unterstützt. | Context3D | ||
totalGPUMemory : Number [schreibgeschützt]
Gibt den Gesamt-GPU-Speicher zurück, der von den Stage3D-Datenstrukturen einer Anwendung zugeordnet wurde. Wenn ein GPU-Ressourcenobjekt erstellt wird, wird der verwendete Speicher in Context3D gespeichert. | Context3D |
Methode | Definiert von | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registriert ein Ereignis-Listener-Objekt bei einem EventDispatcher-Objekt, sodass der Listener über ein Ereignis benachrichtigt wird. | 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
Löscht die Farb-, Tiefen- und Schablonenbuffer, die diesem Context3D-Objekt zugeordnet sind, und füllt sie mit den angegebenen Werten. | Context3D | ||
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Legt die Viewportabmessungen und andere Attribute des Renderpuffers fest. | Context3D | ||
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Erstellt ein CubeTexture-Objekt. | Context3D | ||
Erstellt ein IndexBuffer3D-Objekt. | Context3D | ||
Erstellt ein Program3D-Objekt. | Context3D | ||
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Erstellt ein RectangleTexture-Objekt. | Context3D | ||
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Erstellt ein Texture-Objekt. | Context3D | ||
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Erstellt ein VertexBuffer3D-Objekt. | Context3D | ||
createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Erstellt ein VertexBuffer3D-Objekt für Instanzdaten. | Context3D | ||
Erstellt ein VideoTexture-Objekt. | Context3D | ||
Sendet ein Ereignis in den Ereignisablauf. | EventDispatcher | ||
Macht alle Ressourcen und internen Speicher frei, die/der mit diesem Context3D-Objekt verknüpft sind. | Context3D | ||
Zeichnet den aktuellen Renderpuffer in eine Bitmap. | Context3D | ||
Rendert die angegebenen Dreiecke mit den aktuellen Puffern und dem Zustand dieses Context3D-Objekts. | Context3D | ||
drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Rendert die angegebenen Dreiecke mit den aktuellen Puffern und dem Zustand dieses Context3D-Objekts. | Context3D | ||
Überprüft, ob das EventDispatcher-Objekt Listener für einen bestimmten Ereignistyp registriert hat. | EventDispatcher | ||
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. | Object | ||
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. | Object | ||
Zeigt den Hintergrund-Renderpuffer an. | Context3D | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Entfernt einen Listener aus dem EventDispatcher-Objekt. | EventDispatcher | ||
Legt die Faktoren fest, die zum Mischen der Ausgabefarbe eines Zeichenvorgangs mit der vorhandenen Farbe verwendet werden. | Context3D | ||
Legt die Maske fest, die beim Schreiben der Farben in den Renderbuffer verwendet wird. | Context3D | ||
Legt den Dreieckcullingmodus fest. | Context3D | ||
Legt den Vergleichstyp fest, der für Tiefentests verwendet wird. | Context3D | ||
Füllmodus für das Rendern festlegen. | Context3D | ||
Legt Vertex- und Fragmentshaderprogramme fest, die für das nachfolgende Rendern verwendet werden. | Context3D | ||
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Legt Konstanten für die Verwendung durch Shader-Programme fest, indem in einem ByteArray-Objekt gespeicherte Werte verwendet werden. | Context3D | ||
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Legt Konstanten für die Verwendung durch Shader-Programme fest, indem in einem Matrix3D-Objekt gespeicherte Werte verwendet werden. | Context3D | ||
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Legt die Konstanteneingaben für die Shaderprogramme fest. | Context3D | ||
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. | Object | ||
Legt den Hintergrund-Renderpuffer als Renderziel fest. | Context3D | ||
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Legt die angegebene Textur als Renderziel fest. | Context3D | ||
Textursamplerstatus manuell überschreiben. | Context3D | ||
Legt ein Scherenrechteck fest, was eine Art von Zeichenmaske ist. | Context3D | ||
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Legt den Schablonenmodus und -vorgang fest. | Context3D | ||
Legt den Schablonenvergleichswert fest, der für Schablonentests verwendet wird. | Context3D | ||
Gibt die Textur an, die für ein Textureingaberegister eines Fragmentprogramms verwendet werden soll. | Context3D | ||
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Gibt an, welche Vertexdatenkomponenten einer einzelnen Vertexshaderprogrammeingabe entsprechen. | Context3D | ||
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas. | Object | ||
Gibt das angegebene Objekt als String zurück. | Object | ||
Gibt den Grundwert des angegebenen Objekts zurück. | Object | ||
Überprüft, ob bei diesem EventDispatcher-Objekt oder bei einem seiner Vorgänger ein Ereignis-Listener für einen bestimmten Ereignistyp registriert ist. | EventDispatcher |
backBufferHeight | Eigenschaft |
backBufferHeight:int
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 15, AIR 15 |
Gibt die Höhe des Hintergrundpuffers an. Dies kann durch einen erfolgreichen Aufruf der configureBackBuffer()
-Methode geändert werden. Die Höhe kann bei einer Änderung des Browser-Zoomfaktors geändert werden, wenn für wantsBestResolutionOnBrowserZoom
der Wert true
im letzten erfolgreichen Aufruf der configureBackBuffer()
-Methode festgelegt wurde. Die Änderung der Höhe kann erkannt werden, indem ein Ereignis-Listener für die Änderung des Browser-Zooms registriert wird.
Implementierung
public function get backBufferHeight():int
Verwandte API-Elemente
backBufferWidth | Eigenschaft |
backBufferWidth:int
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 15, AIR 15 |
Gibt die Breite des Hintergrundpuffers an. Dies kann durch einen erfolgreichen Aufruf der configureBackBuffer()
-Methode geändert werden. Die Breite kann bei einer Änderung des Browser-Zoomfaktors geändert werden, wenn für wantsBestResolutionOnBrowserZoom
der Wert true
im letzten erfolgreichen Aufruf der configureBackBuffer()
-Methode festgelegt wurde. Die Änderung der Breite kann erkannt werden, indem ein Ereignis-Listener für die Änderung des Browser-Zooms registriert wird.
Implementierung
public function get backBufferWidth():int
Verwandte API-Elemente
driverInfo | Eigenschaft |
driverInfo:String
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Der Typ des Grafikbibliothekstreibers, der von diesem Renderingkontext verwendet wird. Gibt an, ob für das Rendering Software, ein DirectX-Treiber oder ein OpenGL-Treiber verwendet wird. Gibt auch an, ob das Hardwarerendern fehlgeschlagen ist. Wenn das Hardwarerendern fehlschlägt, verwendet Flash Player Softwarerendern für Stage3D, und driverinfo
enthält einen der folgenden Werte:
- "Software Hw_disabled=userDisabled" - Das Kontrollkästchen „Hardwarebeschleunigung aktivieren“ in den Einstellungen von Adobe Flash Player wurde nicht ausgewählt.
- "Software Hw_disabled=oldDriver" - Es gibt bekannte Probleme mit dem Hardwaregrafiktreiber. Möglicherweise kann das Problem durch eine Aktualisierung des Grafiktreibers behoben werden.
- "Software Hw_disabled=unavailable" - Bekannte Probleme mit dem Hardwaregrafiktreiber oder Initialisierungsfehler mit der Grafikhardware.
- "Software Hw_disabled=explicit" - Der Inhalt hat über requestContext3D ausdrücklich das Softwarerendern angefordert.
- "Software Hw_disabled=domainMemory" - Der Inhalt verwendet domainMemory, wofür im Fall der Verwendung mit Stage3D-Hardwarerendering eine Lizenz erforderlich ist. Besuchen Sie adobe.com/go/fpl_de.
Implementierung
public function get driverInfo():String
enableErrorChecking | Eigenschaft |
enableErrorChecking:Boolean
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Gibt an, ob vom Renderer gefundene Fehler der Anwendung gemeldet werden.
Wenn enableErrorChecking
den Wert true
hat, sind die clear()
- und drawTriangles()
-Methoden synchron und können Fehler ausgeben. Wenn enableErrorChecking
den Wert false
hat, was die Standardeinstellung ist, sind die clear()
- und drawTriangles()
-Methoden asynchron und es werden keine Fehler gemeldet. Durch die Aktivierung der Fehlerüberprüfung wird die Renderingleistung beeinträchtigt. Sie sollten die Fehlerüberprüfung nur beim Debugging aktivieren.
Implementierung
public function get enableErrorChecking():Boolean
public function set enableErrorChecking(value:Boolean):void
Verwandte API-Elemente
maxBackBufferHeight | Eigenschaft |
maxBackBufferHeight:int
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 15, AIR 15 |
Legt die maximale Höhe des Hintergrundpuffers fest. Der Anfangswert ist der Systemgrenzwert der Plattform. Für diese Eigenschaft kann ein Wert festgelegt werden, der kleiner oder gleich der Systemgrenze ist, er kann diese jedoch nicht überschreiten. Für diese Eigenschaft kann ein Wert festgelegt werden, der größer oder gleich dem unteren Grenzwert ist, er kann diesen jedoch nicht unterschreiten. Der untere Grenzwert ist der konstante Wert 32, wenn der Hintergrundpuffer nicht konfiguriert ist. Der untere Grenzwert ist der Wert des Parameters für die Höhe im letzten erfolgreichen Aufruf der configureBackBuffer()
-Methode, nachdem der Hintergrundpuffer konfiguriert wurde.
Implementierung
public function get maxBackBufferHeight():int
public function set maxBackBufferHeight(value:int):void
maxBackBufferWidth | Eigenschaft |
maxBackBufferWidth:int
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 15, AIR 15 |
Gibt die maximale Breite des Hintergrundpuffers an. Der Anfangswert ist der Systemgrenzwert der Plattform. Für diese Eigenschaft kann ein Wert festgelegt werden, der kleiner oder gleich der Systemgrenze ist, er kann diese jedoch nicht überschreiten. Für diese Eigenschaft kann ein Wert festgelegt werden, der größer oder gleich dem unteren Grenzwert ist, er kann diesen jedoch nicht unterschreiten. Der untere Grenzwert ist der konstante Wert 32, wenn der Hintergrundpuffer nicht konfiguriert ist. Der untere Grenzwert ist der Wert des Parameters für die Breite im letzten erfolgreichen Aufruf der configureBackBuffer()
-Methode, nachdem der Hintergrundpuffer konfiguriert wurde.
Implementierung
public function get maxBackBufferWidth():int
public function set maxBackBufferWidth(value:int):void
profile | Eigenschaft |
supportsVideoTexture | Eigenschaft |
totalGPUMemory | Eigenschaft |
totalGPUMemory:Number
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 21, AIR 21 |
Gibt den Gesamt-GPU-Speicher zurück, der von den Stage3D-Datenstrukturen einer Anwendung zugeordnet wurde.
Wenn ein GPU-Ressourcenobjekt erstellt wird, wird der verwendete Speicher in Context3D gespeichert. Dieser Arbeitsspeicher enthält Indexpuffer, Vertexpuffer, Texturen (ohne Videotextur) und Programme, die über dieses Context3D-Objekt erstellt wurden.
API totalGPUMemory
gibt den Gesamtspeicher an den Benutzer zurück, der von den oben genannten Ressourcen verbraucht wurde. Der zurückgegebene Standardwert ist 0. Der zurückgegebene Gesamtspeicher ist in Bytes. Die Informationen werden nur auf dem Mobilgerät im direkten Modus und im direkten und GPU-Modus auf dem Desktop bereitgestellt. (Wenn auf dem Desktop <renderMode>gpu</renderMode>
fällt zurück auf <renderMode>direct</renderMode>
verwendet wird)
Implementierung
public function get totalGPUMemory():Number
clear | () | Methode |
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
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Löscht die Farb-, Tiefen- und Schablonenbuffer, die diesem Context3D-Objekt zugeordnet sind, und füllt sie mit den angegebenen Werten.
Legen Sie den mask
-Parameter fest, um die zu löschenden Buffer anzugeben. Verwenden Sie die in der Context3DClearMask-Klasse definierten Konstanten, um den mask
-Parameter festzulegen. Verwenden Sie den bitweisen OR-Operator, „|“, um mehrere Puffer zur Maske hinzuzufügen (oder verwenden Sie Context3DClearMask.ALL
). Beim Rendern in den Hintergrundpuffer muss die configureBackBuffer()
-Methode vor allen Aufrufen von clear()
aufgerufen werden.
Hinweise: Wenn Sie einen Parameterwert außerhalb des zulässigen Bereichs festlegen, werden numerische Parameterwerte ohne Meldung an den Bereich null bis eins gehängt. Wenn stencil
größer als 0xff ist, wird es auf 0xff gesetzt.
Parameter
red:Number (default = 0.0 ) — die rote Komponente der Farbe, mit der der Farbbuffer gelöscht wird, im Bereich null bis eins.
| |
green:Number (default = 0.0 ) — die grüne Komponente der Farbe, mit der der Farbbuffer gelöscht wird, im Bereich null bis eins.
| |
blue:Number (default = 0.0 ) — die blaue Komponente der Farbe, mit der der Farbbuffer gelöscht wird, im Bereich null bis eins.
| |
alpha:Number (default = 1.0 ) — die Alpha-Komponente der Farbe, mit der der Farbbuffer gelöscht wird, im Bereich null bis eins. Die Alpha-Komponenten wird nicht zum Mischen verwendet. Sie wird direkt in den Puffer-Alpha geschrieben.
| |
depth:Number (default = 1.0 ) — der Wert, mit dem der Tiefenbuffer gelöscht wird, im Bereich null bis eins.
| |
stencil:uint (default = 0 ) — der 8-Bit-Wert, mit dem der Schablonenbuffer gelöscht wird, in einem Bereich von 0x00 bis 0xff.
| |
mask:uint (default = 0xffffffff ) — gibt an, welche Buffer gelöscht werden sollen.
|
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.
|
Verwandte API-Elemente
configureBackBuffer | () | Methode |
public function configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt die Viewportabmessungen und andere Attribute des Renderpuffers fest.
Rendering wird doppelt gepuffert. Der Backbuffer wird mit dem sichtbaren Frontbuffer getauscht, wenn die present()
-Methode aufgerufen wird. Die Mindestgröße des Puffers ist 32x32 Pixel. Die maximale Hintergrundpuffergröße wird von den Gerätefunktionen eingeschränkt und kann außerdem vom Benutzer über die Eigenschaften maxBackBufferWidth
und maxBackBufferHeight
festgelegt werden. Die Pufferkonfiguration ist ein langsamer Vorgang. Vermeiden Sie das Ändern der Puffergröße oder -attribute während normaler Renderingvorgänge.
Parameter
width:int — Breite des Puffers in Pixel.
| |||||||||
height:int — Höhe des Puffers in Pixel.
| |||||||||
antiAlias:int — ein ganzzahliger Wert, der die angeforderte Anti-Alias-Qualität angibt. Der Wert korreliert mit der Anzahl der Subsamples, die beim Antialiasing verwendet werden. Bei Verwendung von mehr Subsamples müssen mehr Berechnungen ausgeführt werden, obwohl die relative Leistungsbeeinträchtigung von der jeweiligen Renderinghardware abhängig ist. Der Antialiasingtyp und ob Antialiasing überhaupt ausgeführt wird, ist vom Gerät und vom Rendermodus abhängig. Antialiasing wird vom Softwarerenderkontext nicht unterstützt.
| |||||||||
enableDepthAndStencil:Boolean (default = true ) — false zeigt an, dass kein Tiefen- oder Schablonenpuffer erstellt wird, mit true wird ein Tiefen- und Schablonenpuffer erstellt. Für AIR-Anwendungen mit AIR-Version 3.2 oder höher, die mit SWF-Version 15 oder höher kompiliert werden, und deren renderMode -Element in der Anwendungsdeskriptordatei den Wertdirect hat, muss das depthAndStencil -Element in der Anwendungsdeskriptordatei denselben Wert wie dieses Argument haben. Standardmäßig hat das depthAndStencil -Element den Wert false .
| |||||||||
wantsBestResolution:Boolean (default = false ) — true gibt an, dass, wenn das Gerät HiDPI-Bildschirme unterstützt, versucht wird, einen größeren Hintergrundpuffer zuzuordnen, als mit den width- und height-Parametern angegeben ist. Da hierbei mehr Pixel hinzugefügt werden und das Ergebnis der Shadervorgänge geändert werden kann, ist dies standardmäßig deaktiviert. Verwenden Sie Stage.contentsScaleFactor, um festzulegen, wie weit der native Hintergrundpuffer heraufskaliert wurde.
| |||||||||
wantsBestResolutionOnBrowserZoom:Boolean (default = false ) — true gibt an, dass der Hintergrundpuffer proportional zum Browser-Zoomfaktor vergrößert werden soll. Die Einstellung dieses Werts ist für mehrere Browser-Zoomvorgänge persistent. Der Standardwert des Parameters ist false . Legen Sie die Eigenschaften maxBackBufferWidth und maxBackBufferHeight fest, um die Vergrößerung des Hintergrundpuffers zu beschränken. Verwenden Sie backBufferWidth und backBufferHeight , um die aktuelle Größe des Hintergrundpuffers zu bestimmen.
|
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — Fehlerhafte Eingabegröße: Der Breiten- oder Höhen-Parameter ist entweder kleiner als die zulässige minimale Hintergrundpuffergröße oder größer als die maximale Hintergrundpuffergröße.
| |
Error — 3709: Das depthAndStencil -Flag im Anwendungsdeskriptor muss mit dem booleschen enableDepthAndStencil -Wert übereinstimmen, der an configureBackBuffer() im Context3D-Objekt übergeben wurde.
|
createCubeTexture | () | Methode |
public function createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Erstellt ein CubeTexture-Objekt.
Verwenden Sie ein CubeTexture-Objekt, um Würfeltexturbitmaps in den Renderkontext hochzuladen und während des Rendervorgangs auf eine Würfeltextur zu verweisen. Eine Würfeltextur besteht aus sechs quadratischen Texturen gleicher Größe, die würfelförmig angeordnet sind und beim Beschreiben von Umgebungsmaps hilfreich sind.
Sie können CubeTexture-Objekte nicht mit einem CubeTexture-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein CubeTexture-Objekt erstellt haben, laden Sie die Texturbitmapdaten mit der CubeTexture-Methode uploadFromBitmapData()
, uploadFromByteArray()
oder uploadCompressedTextureFromByteArray()
hoch.
Parameter
size:int — Die Länge der Texturkante in Texel.
| |
format:String — Das Texelformat der von Context3DTextureFormat aufgezählten Liste.
Mithilfe der Texturkomprimierung können Sie Texturbilder im komprimierten Format direkt auf der GPU speichern, wodurch GPU-Speicher und Speicherbrandbreite eingespart werden können. Normalerweise werden komprimierte Texturen offline komprimiert und auf die GPU in komprimierter Form mithilfe der Methode „Texture.uploadCompressedTextureFromByteArray“ hochgeladen. Flash Player 11.4 und AIR 3.4 auf Desktopplattformen unterstützen Laufzeittexturkomprimierung, was in bestimmten Situationen hilfreich sein kann, zum Beispiel, wenn dynamische Texturen von Vektorbildern dargestellt werden sollen. Beachten Sie, dass diese Funktion derzeit nicht auf mobilen Plattformen verfügbar ist und ein ArgumentError (Texturformatdiskrepanz) stattdessen ausgegeben wird. Führen Sie die folgenden Schritte aus, um die Texturkomprimierung zur Laufzeit zu verwenden. 1. Erstellen Sie das Texturobjekt, indem Sie die Methode „Context3D.createCubeTexture()“ aufrufen und dabei entweder „flash.display3D.Context3DTextureFormat.COMPRESSED“ oder „flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA“ als Formatparameter übergeben. 2. Mithilfe der Instanz „flash.display3D.textures.Texture“, die von „createCubeTexture()“ zurückgegeben wurde, rufen Sie entweder „flash.display3D.textures.CubeTexture.uploadFromBitmapData()“ oder „flash.display3D.textures.CubeTexture.uploadFromByteArray()“ auf, um die Textur mit einem Schritt hochzuladen und zu komprimieren. | |
optimizeForRenderToTexture:Boolean — Hat den Wert true , wenn die Textur wahrscheinlich als Renderziel verwendet wird.
| |
streamingLevels:int (default = 0 ) — Das MIP-Map-Level, das geladen sein muss, bevor das Bild gerendert wird. Texturstreaming bietet die Möglichkeit die kleinsten MIP-Level zuerst zu laden und anzuzeigen, wobei beim Laden der Testuren schrittweise Bilder mit besserer Qualität angezeigt werden. Endbenutzer können qualitativ schlechtere Bilder in einer Anwendung anzeigen, während die Bilder mit besserer Qualität geladen werden.
Der Standardwert für streamingLevels ist 0, was bedeutet, dass das Bild mit der höchsten Qualität in der MIP-Map geladen sein muss, bevor das Bild dargestellt wird. Dieser Parameter wurde für Flash Player 11.3 und AIR 3.3 hinzugefügt. Wenn Sie den Standardwert verwenden, wird das Verhalten früherer Versionen von Flash Player und AIR beibehalten. Stellen Sie Hinweis: Das Einstellen dieser Eigenschaft auf einen Wert > 0 kann Speicherauslastung und Leistung beeinträchtigen. |
flash.display3D.textures:CubeTexture |
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — Ressourcenlimit überschritten: wenn zu viele Texture-Objekte erstellt werden oder wenn der Speicher, der Texturen zugewiesen wurde, überschritten wird.
| |
ArgumentError — Tiefentextur nicht implementiert: wenn Sie versuchen, eine Tiefentextur zu erstellen.
| |
ArgumentError — Texturgröße ist null: wenn der size -Parameter nicht größer als null ist.
| |
ArgumentError — Textur keine Zweierpotenz: wenn der size -Parameter keine Zweierpotenz ist.
| |
ArgumentError — Textur zu groß: wenn der size -Parameter größer als 1024 ist.
| |
Error — Textur konnte nicht erstellt werden: wenn das CubeTexture-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine Informationen über den Grund verfügbar sind).
| |
ArgumentError — Ungültiges Streaming: wenn streamingLevels größer oder gleich log2(size) ist.
|
Verwandte API-Elemente
createIndexBuffer | () | Methode |
public function createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Erstellt ein IndexBuffer3D-Objekt.
Verwenden Sie ein IndexBuffer3D-Objekt, um einen Satz Dreieckindizes in den Renderkontext hochzuladen und für das Rendern auf diesen Indexsatz zu verweisen. Jeder Index im Indexpuffer verweist auf einen entsprechenden Vertex im Vertexpuffer. Jeder Satz aus drei Indizes stellt ein Dreieck dar. Übergeben Sie das IndexBuffer3D-Objekt an die drawTriangles()
-Methode, um eines oder mehrere der im Indexpuffer definierten Dreiecke zu rendern.
Sie können IndexBuffer3D-Objekte nicht mit dem IndexBuffer3D-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein IndexBuffer3D-Objekt erstellt haben, laden Sie die Indizes mithilfe der IndexBuffer3D-Methoden uploadFromVector()
oder uploadFromByteArray()
hoch.
Parameter
numIndices:int — die Anzahl der Scheitelpunkte, die im Puffer gespeichert werden.
| |
bufferUsage:String (default = "staticDraw ") — die erwartete Pufferverwendung. Verwenden Sie eine der Konstanten, die in Context3DBufferUsage definiert ist. Der Hardwaretreiber kann die entsprechende Optimierung vornehmen, wenn Sie ihn richtig festlegen. Dieser Parameter ist nur nach Flash 12/AIR 4 verfügbar.
|
IndexBuffer3D |
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — Ressourcenlimit überschritten: wenn zu viele Indexpuffer erstellt werden oder wenn der Speicher, der Indexpuffern zugewiesen wurde, überschritten wird.
| |
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.
| |
ArgumentError — Puffer zu groß: Wenn numIndices größer als oder gleich 0xf0000 ist.
|
Verwandte API-Elemente
createProgram | () | Methode |
public function createProgram():Program3D
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Erstellt ein Program3D-Objekt.
Verwenden Sie ein Program3D-Objekt, um Shaderprogramme in den Renderkontext hochzuladen und während des Rendervorgangs auf die hochgeladenen Programme zu verweisen. Ein Program3D-Objekt speichert zwei Programme, ein Vertexprogramm und ein Fragmentprogramm (auch Pixelprogramm genannt). Die Programme werden in einer binären Shader-Aufbausprache geschrieben.
Sie können Program3D-Objekte nicht mit dem Program3D-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein Program3D-Objekt erstellt haben, laden Sie die Programme mithilfe der Program3D-Methode upload()
hoch.
Program3D |
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — Die Anzahl der Programme übersteigt 4096 oder die Gesamtspeichergröße übersteigt 16 MB (verwenden Sie dispose , um Program3D-Ressourcen freizugeben).
|
Verwandte API-Elemente
Beispiel ( Verwendung dieses Beispiels )
renderContext
, eine Instanz der Context3D-Klasse ist. Die Programme in diesem Beispiel sind in Adobe Graphics Assembly Language (AGAL) geschrieben.
//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 | () | Methode |
public function createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.8, AIR 3.8 |
Erstellt ein RectangleTexture-Objekt.
Verwenden Sie ein RectangleTexture-Objekt, um Texturbitmaps in den Renderkontext hochzuladen und während des Rendervorgangs auf eine Textur zu verweisen.
Sie können RectangleTexture-Objekte nicht mit dem RectangleTexture-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein RectangleTexture-Objekt erstellt haben, laden Sie die Texturbitmaps mit der Texture-Methode uploadFromBitmapData()
oder uploadFromByteArray()
hoch.
Beachten Sie, dass 32-Bit-Ganzzahltexturen in einem komprimierten BGRA-Format gespeichert werden, damit sie dem Flash-BitmapData
-Format entsprechen. Gleitkommatexturen verwenden ein konventionelles RGBA-Format.
Rechtecktexturen unterscheiden sich dadurch von regulären 2D-Texturen, dass die Breite und Höhe keine Zweierpotenzen sein müssen. Außerdem enthalten sie keine Mipmaps. Sie sind am hilfreichsten beim Rendern in Texturen. Wenn eine Rechtecktextur mit einem Sampler verwendet wird, der Mipmapfilterung oder Repeat-Wrapping verwendet, schlägt der Aufruf von drawTriangles fehl. Rechtecktexturen lassen auch kein Streaming zu. Die einzigen Texturformate, die von Rechtecktexturen unterstützt werden, sind BGRA, BGR_PACKED, BGRA PACKED. Die komprimierten Texturformate werden nicht von Rechtecktexturen unterstützt.
Parameter
width:int — Die Breite der Textur in Pixel.
| |
height:int — Die Höhe der Textur in Pixel.
| |
format:String — Das Texelformat der von Context3DTextureFormat aufgezählten Liste.
| |
optimizeForRenderToTexture:Boolean — Hat den Wert true , wenn die Textur wahrscheinlich als Renderziel verwendet wird.
|
flash.display3D.textures:RectangleTexture |
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — Ressourcenlimit überschritten: wenn zu viele Texture-Objekte erstellt werden oder wenn der Speicher, der Texturen zugewiesen wurde, überschritten wird.
| |
ArgumentError — Texturgröße ist null: wenn weder der width - noch der height -Parameter größer als null ist.
| |
ArgumentError — Textur zu groß: wenn entweder der width - oder der height -Parameter größer als 2048 ist.
| |
Error — Textur konnte nicht erstellt werden: wenn das Texture-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine Informationen über den Grund verfügbar sind).
| |
Error — Erfordert Baseline-Profil oder höher: Wenn rechteckige Textur mit eingeschränktem Baseline-Profil erstellt wird.
|
Verwandte API-Elemente
createTexture | () | Methode |
public function createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Erstellt ein Texture-Objekt.
Verwenden Sie ein Texture-Objekt, um Texturbitmaps in den Renderkontext hochzuladen und während des Rendervorgangs auf eine Textur zu verweisen.
Sie können Texture-Objekte nicht mit einem Texture-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein Texture-Objekt erstellt haben, laden Sie die Texturbitmaps mit der Texture-Methode uploadFromBitmapData()
, uploadFromByteArray()
oder uploadCompressedTextureFromByteArray()
hoch.
Beachten Sie, dass 32-Bit-Ganzzahltexturen in einem komprimierten BGRA-Format gespeichert werden, damit sie dem Flash-BitmapData
-Format entsprechen. Gleitkommatexturen verwenden ein konventionelles RGBA-Format.
Parameter
width:int — Die Breite der Textur in Pixel.
| |
height:int — Die Höhe der Textur in Pixel.
| |
format:String — Das Texelformat der von Context3DTextureFormat aufgezählten Liste.
Mithilfe der Texturkomprimierung können Sie Texturbilder im komprimierten Format direkt auf der GPU speichern, wodurch GPU-Speicher und Speicherbrandbreite eingespart werden können. Normalerweise werden komprimierte Texturen offline komprimiert und auf die GPU in komprimierter Form mithilfe der Methode „Texture.uploadCompressedTextureFromByteArray“ hochgeladen. Flash Player 11.4 und AIR 3.4 auf Desktopplattformen unterstützen Laufzeittexturkomprimierung, was in bestimmten Situationen hilfreich sein kann, zum Beispiel, wenn dynamische Texturen von Vektorbildern dargestellt werden sollen. Beachten Sie, dass diese Funktion derzeit nicht auf mobilen Plattformen verfügbar ist und ein ArgumentError (Texturformatdiskrepanz) stattdessen ausgegeben wird. Führen Sie die folgenden Schritte aus, um die Texturkomprimierung zur Laufzeit zu verwenden. 1. Erstellen Sie das Texturobjekt, indem Sie die Methode „Context3D.createTexture()“ aufrufen und dabei entweder „flash.display3D.Context3DTextureFormat.COMPRESSED“ oder „flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA“ als Formatparameter übergeben. 2. Mithilfe der Instanz „flash.display3D.textures.Texture“ die von „createTexture()“ zurückgegeben wurde, rufen Sie entweder „flash.display3D.textures.Texture.uploadFromBitmapData()“ oder „flash.display3D.textures.Texture.uploadFromByteArray()“ auf, um die Textur mit einem Schritt hochzuladen und zu komprimieren. | |
optimizeForRenderToTexture:Boolean — Hat den Wert true , wenn die Textur wahrscheinlich als Renderziel verwendet wird.
| |
streamingLevels:int (default = 0 ) — Das MIP-Map-Level, das geladen sein muss, bevor das Bild gerendert wird. Texturstreaming bietet die Möglichkeit die kleinsten MIP-Level zuerst zu laden und anzuzeigen, wobei beim Laden der Testuren schrittweise Bilder mit besserer Qualität angezeigt werden. Endbenutzer können qualitativ schlechtere Bilder in einer Anwendung anzeigen, während die Bilder mit besserer Qualität geladen werden.
Der Standardwert für streamingLevels ist 0, was bedeutet, dass das Bild mit der höchsten Qualität in der MIP-Map geladen sein muss, bevor das Bild dargestellt wird. Dieser Parameter wurde für Flash Player 11.3 und AIR 3.3 hinzugefügt. Wenn Sie den Standardwert verwenden, wird das Verhalten früherer Versionen von Flash Player und AIR beibehalten. Stellen Sie Hinweis: Das Einstellen dieser Eigenschaft auf einen Wert > 0 kann Speicherauslastung und Leistung beeinträchtigen. |
flash.display3D.textures:Texture |
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — Ressourcenlimit überschritten: wenn zu viele Texture-Objekte erstellt werden oder wenn der Speicher, der Texturen zugewiesen wurde, überschritten wird.
| |
ArgumentError — Tiefentextur nicht implementiert: wenn Sie versuchen, eine Tiefentextur zu erstellen.
| |
ArgumentError — Texturgröße ist null: wenn weder der width - noch der height -Parameter größer als null ist.
| |
ArgumentError — Textur keine Zweierpotenz: wenn weder der width - noch der height -Parameter eine Zweierpotenz ist.
| |
ArgumentError — Textur zu groß: Wenn width - oder height -Parameter größer ist als 2048 für Baseline und eingeschränktes Baseline-Profil sind oder wenn entweder width - oderheight -Parameter größer als 4096 und mehr für das erweiterte Baseline-Profil ist.
| |
Error — Textur konnte nicht erstellt werden: wenn das Texture-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine Informationen über den Grund verfügbar sind).
| |
ArgumentError — Ungültiges Streaming: wenn streamingLevels größer oder gleich log2(min(width,height)) ist.
|
Verwandte API-Elemente
createVertexBuffer | () | Methode |
public function createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Erstellt ein VertexBuffer3D-Objekt.
Verwenden Sie ein VertexBuffer3D-Objekt, um einen Satz von Vertexdaten in den Renderkontext hochzuladen. Ein Vertexpuffer enthält die Daten, die zum Rendern der einzelnen Punkte in der Szenengeometrie erforderlich sind. Die Datenattribute, die den einzelnen Vertizes zugeordnet sind, umfassen normalerweise Koordinaten für Position, Farbe und Textur und dienen als Eingabe für das Vertexshaderprogramm. Identifizieren Sie die Datenwerte, die einer der Eingaben in das Vertexprogramm entsprechen, indem Sie die setVertexBufferAt()
-Methode verwenden. Sie können für jeden Vertex bis zu 64 32-Bit-Werte angeben.
Sie können VertexBuffer3D-Objekte nicht mit dem VertexBuffer3D-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein VertexBuffer3D-Objekt erstellt haben, laden Sie die Vertexdaten mithilfe der VertexBuffer3D-Methoden uploadFromVector()
oder uploadFromByteArray()
hoch.
Parameter
numVertices:int — die Anzahl der Scheitelpunkte, die im Puffer gespeichert werden. Die maximale Anzahl von Scheitelpunkten in einem einzelnen Puffer ist 65535.
| |
data32PerVertex:int — die Anzahl von 32-Bit (4-Byte)-Datenwerten, die jedem Vertex zugeordnet sind. Die maximale Anzahl von 32-Bit-Datenelementen pro Vertex ist 64 (oder 256 Bytes). Beachten Sie, dass von einem Vertexshaderprogramm jeweils nur auf acht Attributregister zugegriffen werden kann. Verwenden Sie SetVertextBufferAt() , um Attribute aus einem Vertexpuffer heraus auszuwählen.
| |
bufferUsage:String (default = "staticDraw ") — die erwartete Pufferverwendung. Verwenden Sie eine der Konstanten, die in Context3DBufferUsage definiert ist. Der Hardwaretreiber kann die entsprechende Optimierung vornehmen, wenn Sie ihn richtig festlegen. Dieser Parameter ist nur nach Flash 12/AIR 4 verfügbar.
|
VertexBuffer3D |
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — Ressourcenlimit überschritten: wenn zu viele Vertexpuffer erstellt werden oder wenn der Speicher, der Vertexpuffern zugeteilt wurde, überschritten wird.
| |
ArgumentError — Puffer zu groß: wenn numVertices größer als 0x10000 oder data32PerVertex größer als 64 ist.
| |
ArgumentError — Puffer hat Nullgröße: wenn numVertices oder data32PerVertex null ist.
| |
ArgumentError — Puffer konnte nicht erstellt werden: wenn das VertexBuffer3D-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine weiteren Informationen über den Grund verfügbar sind).
| |
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.
|
Verwandte API-Elemente
Beispiel ( Verwendung dieses Beispiels )
setVertexBufferAt()
-Methode auf, um festzulegen, dass die ersten drei Datenpunkte als 3 Gleitkommawerte in va0 und die zweiten drei Datenpunkte als va1 übergeben werden. Für ein Vertexprogramm können auf diese Weise bis zu 8 Eingaben, auch als Vertexattributregister bezeichnet, definiert werden.
const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); var vertexes:VertexBuffer3D = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va0 as the position data renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va1 as the color data
createVertexBufferForInstances | () | Methode |
public function createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 20.0 |
Erstellt ein VertexBuffer3D-Objekt für Instanzdaten.
Verwenden Sie ein VertexBuffer3D-Objekt, um einen Satz von Instanzdaten in den Renderkontext hochzuladen. Der Vertex-Puffer enthält die Daten, die zum Rendern der einzelnen Instanzen in der Szenengeometrie erforderlich sind. Vertex-Puffer mit Instanzdaten bieten Attribute, die alle Scheitelpunkte einer Instanz gemeinsam haben. und dienen als Eingabe für das Vertex-Shader-Programm. Identifizieren Sie die Datenwerte, die einer der Eingaben in das Vertexprogramm entsprechen, indem Sie die setVertexBufferAt()
-Methode verwenden. Sie können für jeden Vertex-Puffer bis zu 64 32-Bit-Werte angeben.
Sie können VertexBuffer3D-Objekte nicht mit dem VertexBuffer3D-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein VertexBuffer3D-Objekt erstellt haben, laden Sie die Vertexdaten mithilfe der VertexBuffer3D-Methoden uploadFromVector()
oder uploadFromByteArray()
hoch.
Parameter
numVertices:int — die Anzahl von Elementen, die im Puffer gespeichert werden. Die maximale Anzahl von Elementen in einem einzelnen Puffer ist 65535.
| |
data32PerVertex:int — die Anzahl von 32-Bit (4-Byte)-Datenwerten, die jedem Element zugeordnet sind. Die maximale Anzahl von 32-Bit-Datenelementen pro Vertex ist 64 (oder 256 Bytes).
| |
instancesPerElement:int — die Anzahl der Instanzen, die ein Element des Vertex-Puffers verwendet.
| |
bufferUsage:String (default = "staticDraw ") — die erwartete Pufferverwendung. Verwenden Sie eine der Konstanten, die in Context3DBufferUsage definiert ist. Der Hardwaretreiber kann die entsprechende Optimierung vornehmen, wenn Sie ihn richtig festlegen. Dieser Parameter ist nur nach Flash 12/AIR 4 verfügbar.
|
VertexBuffer3D |
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — Ressourcenlimit überschritten: wenn zu viele Vertexpuffer erstellt werden oder wenn der Speicher, der Vertexpuffern zugeteilt wurde, überschritten wird.
| |
ArgumentError — Puffer zu groß: wenn numVertices größer als 0x10000 oder data32PerVertex größer als 64 ist.
| |
ArgumentError — Puffer hat Nullgröße: wenn numVertices oder data32PerVertex null ist.
| |
ArgumentError — Puffer konnte nicht erstellt werden: wenn das VertexBuffer3D-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine weiteren Informationen über den Grund verfügbar sind).
| |
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.
| |
Error — Erfordert erweitertes Standardprofile oder höher: Wenn diese Methode aufgerufen wird, wenn das angeforderte Profil kleiner als das erweiterte Standardprofil ist.
| |
Error — Ungültige Instanzen pro Element: Wenn das instancesPerElement nicht größer als null ist.
|
Verwandte API-Elemente
createVideoTexture | () | Methode |
public function createVideoTexture():flash.display3D.textures:VideoTexture
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 17.0, Flash Player 18.0 |
Erstellt ein VideoTexture-Objekt.
Verwenden Sie ein VideoTexture-Objekt, um Videobilder als Textur vom NetStream-Objekt oder Camera-Objekt zu erhalten und die Videobilder in den Renderkontext hochzuladen.
Das VideoTexture-Objekt kann nicht mit dem VideoTexture-Konstruktor erstellt werden; verwenden Sie stattdessen diese Methode. Hängen Sie nach dem Erstellen eines VideoTexture-Objekts ein NetStream-Objekt oder Camera-Objekt an, um die Videobilder mit den VideoTexture-Methoden attachNetStream()
oder attachCamera()
abzurufen.
Beachten Sie, dass diese Methode null zurückgibt, wenn das System diese Funktion nicht unterstützt.
VideoTexture enthält keine Mipmaps. Wenn VideoTexture mit einem Sampler genutzt wird, der Mipmapfilterung oder Repeat-Wrapping verwendet, schlägt der Aufruf von drawTriangles fehl. VideoTexture kann von Shadern als BGRA-Textur behandelt werden. Der Versuch, das VideoTexture-Objekt zu instanziieren, schlägt fehl, wenn Context3D mit dem softwarebasierten Rendermodus angefordert wurde.
Pro Context3D-Instanz sind maximal 4 VideoTexture-Objekte verfügbar. Auf mobilen Geräten kann die tatsächliche Anzahl der unterstützten VideoTexture-Geräte aufgrund von Plattformbeschränkungen niedriger als 4 sein.
Rückgabewerteflash.display3D.textures:VideoTexture |
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — Ressourcenlimit überschritten: wenn zu viele Texture-Objekte erstellt werden oder wenn der Speicher, der Texturen zugewiesen wurde, überschritten wird.
| |
Error — Textur konnte nicht erstellt werden: wenn das Texture-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine Informationen über den Grund verfügbar sind).
|
dispose | () | Methode |
public function dispose(recreate:Boolean = true):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Macht alle Ressourcen und internen Speicher frei, die/der mit diesem Context3D-Objekt verknüpft sind.
Alle Indexpuffer, Vertexpuffer, Texturen und Programme, die über dieses Context3D-Objekt erstellt wurden, werden entfernt, als ob Sie jeweils dispose()
aufrufen. Zusätzlich wird das Context3D-Objekt selbst entfernt, wobei alle temporären Puffer sowie der Hintergrundpuffer freigegeben werden. Beim Aufruf von configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer() oder drawToBitmapData() nach dem Aufruf von dispose() wird eine Ausnahme ausgegeben.
Warnung: Bei einem Aufruf von dispose() für ein Context3D-Objekt, während es noch einen Ereignis-Listener für Events.CONTEXT3D_CREATE am zugeordneten Stage3D-Objekt gibt, simuliert der dispose()-Aufruf einen Geräteverlust. Damit wird ein neues Context3D-Objekt am Stage3D-Objekt erstellt und das Events.CONTEXT3D_CREATE-Ereignis erneut abgesetzt. Falls dies nicht erwünscht ist, entfernen Sie den Ereignis-Listener vom Stage3D-Objekt, bevor Sie dispose() aufrufen, oder setzen Sie den Parameter auf „false“.
Parameter
recreate:Boolean (default = true )
|
Verwandte API-Elemente
flash.display.Stage3D
drawToBitmapData | () | Methode |
public function drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 3 |
Zeichnet den aktuellen Renderpuffer in eine Bitmap.
Der aktuelle Inhalt des Hintergrund-Renderpuffers wird in ein BitmapData-Objekt kopiert. Dies ist ein potenziell langsamer Vorgang, der bis zu eine Sekunde dauern kann. Gehen Sie mit Vorsicht vor. Beachten Sie, dass diese Funktion nicht den Frontpuffer (der auf der Bühne gezeigt wird) kopiert, sondern den Puffer, in den gezeichnet wird. Um das gerenderte Bild zu erfassen, wie es auf der Bühne erscheint, rufen Sie drawToBitmapData()
direkt vor dem Aufruf von present()
auf.
Ab AIR 25 sind zwei neue Parameter in der API drawToBitmapData()
vorhanden. Diese API umfasst jetzt drei Parameter. Der erste ist der bereits vorhandene Parameter destination:BitmapData
. Der zweite Parameter ist srcRect:Rectangle
, ein Rechteck in Stage3D. Der dritte Parameter ist destPoint:Point
, die Koordinate im Ziel-Bitmap. Die Parameter srcRect und destPoint sind optional und nehmen die Standardwerte (0,0,bitmapWidth,bitmapHeight) bzw. (0,0) an.
Wenn das Bild gezeichnet wird, wird es nicht an die Größe der Bitmap angepasst. Die Inhalte werden stattdessen auf die Größe der Zielbitmap zugeschnitten.
Flash-BitmapData-Objekte speichern Farben, die bereits von der Alphakomponente multipliziert wurden. Wenn zum Beispiel die reinen RGB-Farbkomponenten eines Pixels (0x0A, 0x12, 0xBB) sind und die Alphakomponente 0x7F (.5) ist, wird das Pixel mit den folgenden rgba-Werten im BitmapData-Objekt gespeichert: (0x05, 0x09, 0x5D, 0x7F). Sie können die Mischfaktoren so einstellen, dass die in den Puffer gerenderten Farben mit Alpha multipliziert werden, oder die Operation im Fragmentshader ausführen. Der Renderkontext überprüft nicht, ob die Farben im vorab multiplizierten Format gespeichert werden.
Parameter
destination:BitmapData | |
srcRect:Rectangle (default = null )
| |
destPoint:Point (default = null )
|
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.
| |
Error — 3802: Wenn einer der Parameter destPoint:Point bzw. srcRect:Rectangle außerhalb der Koordinatengrenze „bitmap/stage3D“ liegt oder wenn nicht-numerische Werte (NaN) als Eingabe weitergeleitet werden.
|
Beispiel ( Verwendung dieses Beispiels )
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 | () | Methode |
public function drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Rendert die angegebenen Dreiecke mit den aktuellen Puffern und dem Zustand dieses Context3D-Objekts.
Für jedes Dreieck werden die Dreieckvertices vom Vertex-Shader-Programm und die Dreieckoberfläche vom Pixel-Shader-Programm verarbeitet. Die Ausgabefarbe aus dem Pixelprogramm für die einzelnen Pixel wird in das Renderziel gezeichnet, abhängig von Schablonenoperationen, Tiefentest, Quell- und Ziel-Alpha sowie aktueller Füllmethode. Das Renderziel kann der Hauptrenderpuffer oder eine Textur sein.
Wenn Culling aktiviert ist (mit der setCulling()
-Methode), können Dreiecke aus der Szene entfernt werden, bevor das Pixelprogramm ausgeführt wird. Wenn Schablonen- und Tiefentests aktiviert sind, können die Ausgabepixel aus dem Pixelprogramm verworfen werden, ohne dass das Renderziel aktualisiert werden muss. Zusätzlich kann das Pixelprogramm festlegen, für ein Pixel keine Farbe auszugeben.
Die gerenderten Dreiecke werden im Viewport nicht angezeigt, bis Sie die present()
-Methode aufrufen. Nach jedem Aufruf von present()
muss die clear()
-Methode vor dem ersten Aufruf von drawTriangles()
aufgerufen werden, andernfalls schlägt das Rendern fehl.
Wenn enableErrorChecking
den Wert false
hat, gibt diese Funktion sofort Werte zurück, wartet nicht auf Ergebnisse und gibt Ausnahmen nur dann aus, wenn diese Context3D-Instanz verworfen wurde oder wenn es zu viele Zeichenaufrufe gibt. Wenn der Zustand des Renderingkontextes ungültig ist, schlägt das Rendering ohne weitere Meldung fehl. Wenn die enableErrorChecking
-Eigenschaft den Wert true
hat, gibt diese Funktion Werte zurück, nachdem die Dreiecke gezeichnet wurden, und gibt Ausnahmen für alle Zeichenfehler oder ungültige Kontextzustände zurück.
Parameter
indexBuffer:IndexBuffer3D — ein Satz von Scheitelpunktindizes, die auf die zu rendernden Scheitelpunkte verweisen.
| |
firstIndex:int (default = 0 ) — der Index des ersten zum Rendern ausgewählten Scheitelpunktindex. Standardwert ist 0.
| |
numTriangles:int (default = -1 ) — die Anzahl der zu rendernden Dreiecke. Jedes Dreieck verbraucht drei Indizes. Übergeben Sie -1, um alle Dreiecke im Indexpuffer zu zeichnen. Standardwert ist -1.
|
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — Wenn diese Methode zu viele Male zwischen Aufrufen von present() aufgerufen wurde. Die maximale Anzahl von Aufrufen ist 32.768.
Die folgenden Fehler werden nur dann ausgegeben, wenn die | |
Error — Vor dem Zeichnen Löschen erforderlich: Wenn der Puffer seit dem letzten Aufruf von present() nicht geleert wurde.
| |
Error — Wenn kein gültiges Program3D-Objekt festgelegt wurde.
| |
Error — Kein gültiger Indexpuffer festgelegt: Wenn kein IndexBuffer3D-Objekt festgelegt wurde.
| |
Error — Sanity Check für Parameter fehlgeschlagen: wenn die Anzahl der zu zeichnenden Dreiecke oder firstIndex die zulässigen Werte übersteigt.
| |
RangeError — Nicht genügend Indizes in diesem Puffer: wenn der Puffer nicht genug Indizes enthält, um die Anzahl der zu zeichnenden Dreiecke zu definieren.
| |
Error — Sample bindet Textur, die auch an Renderer gebunden ist: wenn das Renderziel eine Textur ist und diese Textur einer Textureingabe des aktuellen Fragmentprogramm zugewiesen ist.
| |
Error — Sample bindet ungültige Textur: Es wurde eine ungültige Textur als Eingabe für das aktuelle Fragmentprogramm eingegeben.
| |
Error — Samplerformat stimmt nicht mit Texturformat überein: wenn die als Eingabe für das aktuelle Fragmentprogramm zugewiesene Textur ein anderes Format hat als das dem Samplerregister zugewiesene. Beispiel: eine 2D-Textur wurde einem Würfeltextursampler zugewiesen.
| |
Error — Sample bindet nicht definierte Textur: Das aktuelle Fragmentprogramm greift auf ein Texturregister zu, das nicht festgelegt wurde (mit setTextureAt() ).
| |
Error — Dieselbe Textur benötigt dieselben Samplerparameter: Wenn eine Textur für mehrere Samplerregister verwendet wird, müssen alle Sampler dieselben Einstellungen verwenden. Sie können zum Beispiel nicht für einen Sampler die Fortführung der Randfarben („clamp“) und für den anderen die Kachelung („wrap“) verwenden.
| |
Error — Textur gebunden, aber nicht verwendet: Eine Textur ist als Shadereingabe festgelegt, wird jedoch nicht verwendet.
| |
Error — Stream wird nicht verwendet: Ein Vertexpuffer ist einer Vertexattributeingabe zugewiesen, das Vertexprogramm verweist jedoch nicht auf das entsprechende Register.
| |
Error — Stream ist ungültig: Ein VertexBuffer3D-Objekt, das einer Vertexprogrammeingabe zugewiesen ist, ist kein gültiges Objekt.
| |
RangeError — Stream hat nicht genügend Vertizes: Ein Vertexpuffer, der Daten für die angegebenen Dreiecke bereitstellt, hat nicht genügend Daten.
| |
RangeError — Streamvertexoffset außerhalb des gültigen Bereichs: Der in einem Aufruf von setVertexBufferAt() angegebene Offset ist negativ oder nach dem Ende des Puffers.
| |
Error — Stream gelesen, aber nicht festgelegt: Ein Vertexattribut, das vom aktuellen Vertexprogramm gelesen wird, wurde nicht festgelegt (mit setVertexBufferAt() ).
|
Verwandte API-Elemente
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Beispiel ( Verwendung dieses Beispiels )
Die Dreiecke werden mithilfe des Vertexbuffers und des Indexbuffers definiert. Der Vertexbuffer enthält die Informationen zu Position und Farbe für jeden Vertex des Dreiecks. Der Indexbuffer enthält Indizes für den Vertexbuffer. Drei Indizes definieren ein Dreieck. Zum Beispiel wird ein Dreieck, das aus den ersten drei Punkten im Vertexbuffer besteht, im Indexbuffer als 0,1,2 aufgeführt.
In diesem einfachen Beispiel wird keine 3D-Transformation ausgeführt. Es können nur Objekte innerhalb des kanonischen Anzeigebereichs (mit dem Volumen 2x2x1) angezeigt werden und die Koordinaten der Dreiecke müssen innerhalb dieses Bereichs definiert werden. Beim Rendern einer typischen 3D-Szene projizieren Sie die Objekte jedoch für das Rendering aus dem Weltkoordinatensystem in diesen Ansichtsbereich, indem Sie entweder eine perspektivische oder orthografische Projektion verwenden.
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 | () | Methode |
public function drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 20.0 |
Rendert die angegebenen Dreiecke mit den aktuellen Puffern und dem Zustand dieses Context3D-Objekts.
Für jedes Dreieck jeder Instanz werden die Dreieckscheitelpunkte vom Vertex-Shader-Programm und die Dreiecksoberfläche vom Pixel-Shader-Programm verarbeitet. Die Ausgabefarbe aus dem Pixelprogramm für die einzelnen Pixel wird in das Renderziel gezeichnet, abhängig von Schablonenoperationen, Tiefentest, Quell- und Ziel-Alpha sowie aktueller Füllmethode. Das Renderziel kann der Hauptrenderpuffer oder eine Textur sein.
Wenn Culling aktiviert ist (mit der setCulling()
-Methode), können Dreiecke aus der Szene entfernt werden, bevor das Pixelprogramm ausgeführt wird. Wenn Schablonen- und Tiefentests aktiviert sind, können die Ausgabepixel aus dem Pixelprogramm verworfen werden, ohne dass das Renderziel aktualisiert werden muss. Zusätzlich kann das Pixelprogramm festlegen, für ein Pixel keine Farbe auszugeben.
Die gerenderten Instanzdreiecke werden im Viewport nicht angezeigt, bis Sie die present()
-Methode aufrufen. Nach jedem Aufruf von present()
, muss die clear()
-Methode vor dem ersten Aufruf von drawTrianglesInstanced()
aufgerufen werden, andernfalls schlägt das Rendern fehl.
Wenn enableErrorChecking
den Wert false
hat, gibt diese Funktion sofort Werte zurück, wartet nicht auf Ergebnisse und gibt Ausnahmen nur dann aus, wenn diese Context3D-Instanz verworfen wurde oder wenn es zu viele Zeichenaufrufe gibt. Wenn der Zustand des Renderingkontextes ungültig ist, schlägt das Rendering ohne weitere Meldung fehl. Wenn die enableErrorChecking
-Eigenschaft den Wert true
hat, gibt diese Funktion Werte zurück, nachdem die Dreiecke gezeichnet wurden, und gibt Ausnahmen für alle Zeichenfehler oder ungültige Kontextzustände zurück.
Diese Methode gibt eine Ausnahme aus, wenn der Instanz-Puffer inkorrekt mit SetVertexAt()
sequenziert ist. Mit Direct 3D 9 müssen z. B. die indizierten Geometriedaten und die Anzahl der zu zeichnenden Instanzen immer in Stream null mit der API SetStreamSourceFreq()
eingerichtet sein.
Dies bedeutet, dass der mit CreateVertexBufferForInstance()
erstellte Vertex-Puffer nicht mit der Mindest-Indexnummer platziert werden darf, wenn er mit SetVertexBufferAt()
als Eingabe für das Vertex-Shader-Programm angeordnet ist. Der mit CreateVertexBuffer()
erstellte Vertex-Puffer muss mit einer niedrigeren Indexnummer als jener von CreateVertexBufferForInstance()
platziert werden. Im Allgemeinen müssen die Geometriedaten mit SetVertexBufferAt()
vor Instanzdaten platziert werden.
Parameter
indexBuffer:IndexBuffer3D — ein Satz von Scheitelpunktindizes, die auf die zu rendernden Scheitelpunkte verweisen.
| |
numInstances:int — Anzahl von zu rendernden Instanzen.
| |
firstIndex:int (default = 0 ) — der Index des ersten zum Rendern ausgewählten Scheitelpunktindex. Standardwert ist 0.
| |
numTriangles:int (default = -1 ) — die Anzahl der zu rendernden Dreiecke. Jedes Dreieck verbraucht drei Indizes. Übergeben Sie -1, um alle Dreiecke im Indexpuffer zu zeichnen. Standardwert ist -1.
|
Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
| |
Error — Wenn diese Methode zu viele Male zwischen Aufrufen von present() aufgerufen wurde. Die maximale Anzahl von Aufrufen ist 32.768.
| |
Error — Erfordert erweitertes Standardprofile oder höher: Wenn diese Methode aufgerufen wird, wenn das angeforderte Profil kleiner als das erweiterte Standardprofil ist.
| |
Error — Wenn diese Methode mit negativen numInstances aufgerufen wird.
Die folgenden Fehler werden nur dann ausgegeben, wenn die | |
Error — Vor dem Zeichnen Löschen erforderlich: Wenn der Puffer seit dem letzten Aufruf von present() nicht geleert wurde.
| |
Error — Wenn kein gültiges Program3D-Objekt festgelegt wurde.
| |
Error — Kein gültiger Indexpuffer festgelegt: Wenn kein IndexBuffer3D-Objekt festgelegt wurde.
| |
Error — Sanity Check für Parameter fehlgeschlagen: wenn die Anzahl der zu zeichnenden Dreiecke oder firstIndex die zulässigen Werte übersteigt.
| |
RangeError — Nicht genügend Indizes in diesem Puffer: wenn der Puffer nicht genug Indizes enthält, um die Anzahl der zu zeichnenden Dreiecke zu definieren.
| |
Error — Sample bindet Textur, die auch an Renderer gebunden ist: wenn das Renderziel eine Textur ist und diese Textur einer Textureingabe des aktuellen Fragmentprogramm zugewiesen ist.
| |
Error — Sample bindet ungültige Textur: Es wurde eine ungültige Textur als Eingabe für das aktuelle Fragmentprogramm eingegeben.
| |
Error — Samplerformat stimmt nicht mit Texturformat überein: wenn die als Eingabe für das aktuelle Fragmentprogramm zugewiesene Textur ein anderes Format hat als das dem Samplerregister zugewiesene. Beispiel: eine 2D-Textur wurde einem Würfeltextursampler zugewiesen.
| |
Error — Sample bindet nicht definierte Textur: Das aktuelle Fragmentprogramm greift auf ein Texturregister zu, das nicht festgelegt wurde (mit setTextureAt() ).
| |
Error — Dieselbe Textur benötigt dieselben Samplerparameter: Wenn eine Textur für mehrere Samplerregister verwendet wird, müssen alle Sampler dieselben Einstellungen verwenden. Sie können zum Beispiel nicht für einen Sampler die Fortführung der Randfarben („clamp“) und für den anderen die Kachelung („wrap“) verwenden.
| |
Error — Textur gebunden, aber nicht verwendet: Eine Textur ist als Shadereingabe festgelegt, wird jedoch nicht verwendet.
| |
Error — Stream wird nicht verwendet: Ein Vertexpuffer ist einer Vertexattributeingabe zugewiesen, das Vertexprogramm verweist jedoch nicht auf das entsprechende Register.
| |
Error — Stream ist ungültig: Ein VertexBuffer3D-Objekt, das einer Vertexprogrammeingabe zugewiesen ist, ist kein gültiges Objekt.
| |
RangeError — Stream hat nicht genügend Vertizes: Ein Vertexpuffer, der Daten für die angegebenen Dreiecke bereitstellt, hat nicht genügend Daten.
| |
RangeError — Streamvertexoffset außerhalb des gültigen Bereichs: Der in einem Aufruf von setVertexBufferAt() angegebene Offset ist negativ oder nach dem Ende des Puffers.
| |
Error — Stream gelesen, aber nicht festgelegt: Ein Vertexattribut, das vom aktuellen Vertexprogramm gelesen wird, wurde nicht festgelegt (mit setVertexBufferAt() ).
| |
Error — Vertex-Puffer-Stream enthält nicht genügend Elemente für Instanzen: Wenn ein Vertex-Puffer-Stream nicht genug Elemente für die Anzahl der Instanzen enthält.
| |
Error — Vertex-Puffer-Stream für Instanzen ist unzureichend mit dem Mindestindex-Attributregister eingerichtet: Wenn der mit CreateVertexBuffer() erstellte Vertex-Puffer eine höhere Indexnummer erhält als der mit CreateVertexBufferForInstance() erstellte Vertex-Puffer.
|
Verwandte API-Elemente
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Beispiel ( Verwendung dieses Beispiels )
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 | () | Methode |
public function present():void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Zeigt den Hintergrund-Renderpuffer an.
Der Aufruf der present()
-Methode macht die Ergebnisse aller Rendervorgänge seit dem letzten Aufruf von present()
sichtbar und startet einen neuen Renderzyklus. Nachdem Sie present
aufgerufen haben, müssen Sie clear()
aufrufen, bevor Sie einen weiteren Aufruf von drawTriangles()
ausführen. Andernfalls leert diese Funktion den Renderpuffer abwechselnd zu gelb und grün, oder, falls enableErrorChecking
den Wert true
hat, es wird eine Ausnahme ausgelöst.
Mit dem Aufruf von present()
wird auch das Renderziel zurückgesetzt, genau wie beim Aufruf von setRenderToBackBuffer()
.
Auslöser
Error — Vor dem Zeichnen Löschen erforderlich: Wenn clear() seit dem vorherigen Aufruf von present() nicht aufgerufen wurde. (Zwei aufeinander folgende Aufrufe von present() sind nicht zulässig, ohne dazwischen clear() aufzurufen.)
| |
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.
|
setBlendFactors | () | Methode |
public function setBlendFactors(sourceFactor:String, destinationFactor:String):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt die Faktoren fest, die zum Mischen der Ausgabefarbe eines Zeichenvorgangs mit der vorhandenen Farbe verwendet werden.
Die Ausgabefarbe (Ausgangsfarbe) des Pixel-Shader-Programms wird mit der vorhandenen Farbe (Zielfarbe) an diesem Pixel gemäß der folgenden Formel kombiniert:
Ergebnisfarbe = (Ausgangsfarbe * sourceFactor) + (Zielfarbe * destinationFactor)
Die Zielfarbe ist die derzeit im Renderbuffer vorhandene Farbe für dieses Pixel. Somit ist sie das Ergebnis des letzten Aufrufs von clear()
und der Aufrufe von drawTriangles()
.
Verwenden Sie setBlendFactors()
, um die Faktoren festzulegen, mit denen die Ausgangs- und Zielfarbe vor dem Addieren multipliziert werden. Die Standardmischfaktoren sind sourceFactor = Context3DBlendFactor.ONE
und destinationFactor = Context3DBlendFactor.ZERO
, was dazu führt, dass die Ausgangsfarbe die Zielfarbe überschreibt (anders ausgedrückt findet kein Mischen der beiden Farben statt). Verwenden Sie für das normale Alpha-Mischen sourceFactor = Context3DBlendFactor.SOURCE_ALPHA
und destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA
.
Legen Sie die Parameter dieser Funktion mithilfe der Konstanten fest, die in der Context3DBlendFactor-Klasse definiert sind.
Parameter
sourceFactor:String — Der Faktor, mit dem die Ausgangsfarbe multipliziert wird. Die Standardvorgabe ist Context3DBlendFactor.ONE .
| |
destinationFactor:String — Der Faktor, mit dem die Zielfarbe multipliziert wird. Die Standardvorgabe ist Context3DBlendFactor.ZERO .
|
Auslöser
Error — Ungültige Aufzählung: wenn sourceFactor oder destinationFactor keiner der anerkannten Werte ist, die in der Context3DBlendFactor-Klasse definiert sind.
|
Verwandte API-Elemente
Beispiel ( Verwendung dieses Beispiels )
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 | () | Methode |
public function setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt die Maske fest, die beim Schreiben der Farben in den Renderbuffer verwendet wird.
Nur Farbkomponenten, für die der entsprechende Parameter der Farbmaske auf true
gesetzt ist, werden aktualisiert, wenn eine Farbe in den Renderbuffer geschrieben wird. Wenn Sie zum Beispiel setColorMask( true, false, false, false )
aufrufen, wird nur die rote Komponente einer Farbe in den Puffer geschrieben, bis Sie die Farbmaske wieder ändern. Die Farbmaske wirkt sich nicht auf das Verhalten der clear()
-Methode aus.
Parameter
red:Boolean — mit false werden Änderungen am roten Kanal blockiert.
| |
green:Boolean — mit false werden Änderungen am grünen Kanal blockiert.
| |
blue:Boolean — mit false werden Änderungen am blauen Kanal blockiert.
| |
alpha:Boolean — mit false werden Änderungen am Alpha-Kanal blockiert.
|
Beispiel ( Verwendung dieses Beispiels )
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 | () | Methode |
public function setCulling(triangleFaceToCull:String):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt den Dreieckcullingmodus fest.
Dreiecke können basierend auf ihrer Ausrichtung relativ zur Sichtebene früh in der Renderingpipeline von der Szene ausgeschlossen werden. Gibt die Vertexreihenfolge konsistent an (im Uhrzeigersinn oder gegen den Uhrzeigersinn) wie von außerhalb des Modells aus gesehen, um ein korrektes Culling auszuführen.
Parameter
triangleFaceToCull:String — der Cullingmodus. Verwenden Sie eine der Konstanten, die in der Context3DTriangleFace-Klasse definiert sind.
|
Auslöser
Error — Fehler wegen ungültiger Aufzählung: wenn triangleFaceToCull nicht einer der in der Context3DTriangleFace-Klasse definierten Werte ist.
|
Verwandte API-Elemente
setDepthTest | () | Methode |
public function setDepthTest(depthMask:Boolean, passCompareMode:String):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt den Vergleichstyp fest, der für Tiefentests verwendet wird.
Die Tiefe der Ausgangspixelausgabe vom Pixel-Shader-Programm wird mit dem aktuellen Wert im Tiefenpuffer verglichen. Wenn der Vergleich false
ergibt, wird das Ausgangspixel verworfen. Bei dem Wert true
wird das Ausgangspixel vom nächsten Schritt in der Renderingpipeline, dem Schablonentest, verarbeitet. Außerdem wird der Tiefenpuffer mit der Tiefe des Ausgangspixels aktualisiert, solange der Parameter depthMask
den Wert true
hat.
Legt den Test fest, der zum Vergleich der Tiefenwerte für Quell- und Zielpixel verwendet wird. Das Quellpixel wird mit dem Zielpixel zusammengesetzt, wenn „comparison“ den Wert „true“ hat. Der Vergleichsoperator wird als Infix-Operator zwischen den Quell- und Zielpixelwerten verwendet, in dieser Reihenfolge.
Parameter
depthMask:Boolean — bei der Einstellung „true“ wird der Zieltiefenwert aus dem Quellpixel aktualisiert.
| |
passCompareMode:String — der Tiefenvergleichstestvorgang. Einer der Werte von Context3DCompareMode.
|
Verwandte API-Elemente
setFillMode | () | Methode |
public function setFillMode(fillMode:String):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 16 |
Füllmodus für das Rendern festlegen. Die Benutzeroberfläche ist nur in AIR-Desktop verfügbar.
Parameter
fillMode:String — wenn der Wert WIREFRAME ist, wird das Objekt in einem Gitter von Linien angezeigt. wenn der Wert SOLID ist, wird das Objekt in fest schattierten Polygonen angezeigt.
|
Verwandte API-Elemente
setProgram | () | Methode |
public function setProgram(program:Program3D):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt Vertex- und Fragmentshaderprogramme fest, die für das nachfolgende Rendern verwendet werden.
Parameter
program:Program3D — das Program3D-Objekt, das die zu verwendenden Vertex- und Fragmentprogramme darstellt.
|
Verwandte API-Elemente
Beispiel ( Verwendung dieses Beispiels )
renderContext
, eine Instanz der Context3D-Klasse ist. Die Programme in diesem Beispiel sind in Adobe Graphics Assembly Language (AGAL) geschrieben.
//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 | () | Methode |
public function setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.1, AIR 3.1 |
Legt Konstanten für die Verwendung durch Shader-Programme fest, indem in einem ByteArray
-Objekt gespeicherte Werte verwendet werden.
Legt Konstanten fest, auf die das Vertex- oder Fragmentprogramm zugreifen kann.
Parameter
programType:String — einer der Werte von Context3DProgramType.
| |
firstRegister:int — der Index der ersten festzulegenden Shader-Programmkonstante.
| |
numRegisters:int — die Anzahl der festzulegenden Register. Jedes Register wird als vier Gleitkommawerte gelesen.
| |
data:ByteArray — das ByteArray-Quellobjekt
| |
byteArrayOffset:uint — ein Offset für das Lesen im ByteArray
|
Auslöser
TypeError — kNullPointerError, wenn data null ist.
| |
RangeError — kConstantRegisterOutOfBounds, wenn versucht wird, mehr als die maximal zulässige Anzahl von Shader-Konstanten festzulegen.
| |
RangeError — kBadInputSize, wenn byteArrayOffset größer oder gleich der Länge von data ist. von Elementen in data - byteArrayOffset kleiner als numRegisters * 16
|
Verwandte API-Elemente
setProgramConstantsFromMatrix | () | Methode |
public function setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt Konstanten für die Verwendung durch Shader-Programme fest, indem in einem Matrix3D
-Objekt gespeicherte Werte verwendet werden.
Verwenden Sie diese Funktion, um eine Matrix an ein Shaderprogramm zu übergeben. Die Funktion legt vier Konstantenregister fest, die vom Vertex- oder Fragmentprogramm verwendet. Die Matrix wird Zeile für Zeile Registern zugewiesen. Das erste Konstantenregister ist der obersten Zeile der Matrix zugewiesen. Sie können 128 Register für ein Vertexprogramm und 28 für ein Fragmentprogramm festlegen.
Parameter
programType:String — Der Typ des Shaderprogramms, entweder Context3DProgramType.VERTEX oder Context3DProgramType.FRAGMENT .
| |
firstRegister:int — der Index des ersten Konstantenregisters, das festgelegt werden soll. Da ein Matrix3D-Objekt 16 Werte hat, werden vier Register festgelegt.
| |
matrix:Matrix3D — die Matrix, die die Konstantenwerte enthält.
| |
transposedMatrix:Boolean (default = false ) — bei der Einstellung true werden die Matrixeinträge in der transponierten Reihenfolge in Register kopiert. Der Standardwert ist false .
|
Auslöser
TypeError — Nullzeigerfehler: wenn matrix null ist.
| |
RangeError — Konstantenregister außerhalb des gültigen Bereichs: wenn versucht wird, mehr Shaderkonstantenregister festzulegen als zulässig.
|
Weitere Informationen
Verwandte API-Elemente
setProgramConstantsFromVector | () | Methode |
public function setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt die Konstanteneingaben für die Shaderprogramme fest.
Legt ein Array von Konstanten fest, auf das von einem Vertex- oder Fragmentprogramm zugegriffen werden kann. Auf Konstanten, die in Programm3D festgelegt werden, wird in den Shader-Programmen als Konstantenregister zugegriffen. Jedes Konstantenregister besteht aus 4 Gleitkommawerten (x, y, z, w). Deshalb benötigt jedes Register 4 Einträge im data-Vektor. Die Anzahl der Registrierungen für Scheitelpunkt- und Fragmentprogramm, die Sie festlegen können, hängt vom Context3DProfile
ab.
Parameter
programType:String — Der Typ des Shaderprogramms, entweder Context3DProgramType.VERTEX oder Context3DProgramType.FRAGMENT .
| |
firstRegister:int — der Index des ersten Konstantenregisters, das festgelegt werden soll.
| |
data:Vector.<Number> — die Gleitkommakonstantenwerte. Es muss wenigstens 4 numRegisters -Elemente in data geben.
| |
numRegisters:int (default = -1 ) — die Anzahl der festzulegenden Konstanten. Geben Sie -1, den Standardwert, an, um genügend Register festzulegen, damit alle verfügbaren Daten verwendet werden.
|
Auslöser
TypeError — Nullzeigerfehler: wenn data den Wert null hat.
| |
RangeError — Konstantenregister außerhalb des gültigen Bereichs: wenn versucht wird, mehr Shaderkonstantenregister festzulegen als zulässig.
| |
RangeError — Fehlerhafte Eingabegröße: Wenn die Anzahl der Elemente in data kleiner als numRegisters ist *4
|
Weitere Informationen
Verwandte API-Elemente
setRenderToBackBuffer | () | Methode |
public function setRenderToBackBuffer():void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt den Hintergrund-Renderpuffer als Renderziel fest. Nachfolgende Aufrufe der drawTriangles()
- und clear()
-Methoden führen dazu, dass der Hintergrundpuffer aktualisiert wird. Verwenden Sie diese Methode, um das normale Rendern wiederaufzunehmen, nachdem die setRenderToTexture()
-Methode verwendet wurde.
setRenderToTexture | () | Methode |
public function setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt die angegebene Textur als Renderziel fest.
Nachfolgende Aufrufe der drawTriangles()
- und clear()
-Methoden aktualisieren die angegebene Textur statt des Backpuffers. Mipmaps werden automatisch erstellt. Verwenden Sie setRenderToBackBuffer()
, um das normale Rendern in den Backpuffer fortzusetzen.
Vor dem Zeichnen ist kein Löschvorgang erforderlich. Erfolgt kein Löschvorgang, bleibt der gerenderte Inhalt erhalten. Tiefenpuffer und Schablonenpuffer werden ebenfalls nicht gelöscht. Beim ersten Zeichenvorgang wird dies jedoch erzwungen. Der Aufruf von present()
setzt das Ziel auf den Hintergrundpuffer zurück.
Parameter
texture:flash.display3D.textures:TextureBase — die Zieltextur für das Rendern. Setzen Sie dies auf null , um das Rendern in den Backpuffer fortzusetzen (setRenderToBackBuffer() und present setzen das Ziel ebenfalls auf den Backpuffer zurück).
| |
enableDepthAndStencil:Boolean (default = false ) — bei der Einstellung true sind Tiefen- und Schablonentests verfügbar. Bei der Einstellung false wird der Tiefen- und Schablonenstatus für nachfolgende Zeichenvorgänge ignoriert.
| |
antiAlias:int (default = 0 ) — die Antialiasingqualität. Verwenden Sie 0, um Antialiasing zu deaktivieren; höhere Werte verbessern die Qualität des Antialiasing, erfordern jedoch mehr Rechenleistung. Der Wert wird zur Zeit nach Mobilplattform und Softwarerenderkontext ignoriert.
| |
surfaceSelector:int (default = 0 ) — legt fest, welches Element der Textur aktualisiert werden soll. Texture-Objekte haben eine Oberfläche, deshalb müssen Sie den Standardwert, 0, angeben. CubeTexture-Objekte haben sechs Oberflächen, deshalb können Sie eine Ganzzahl zwischen 0 und 5 angeben.
| |
colorOutputIndex:int (default = 0 ) — Das Ausgabefarbregister. Muss 0 sein für eingeschränkten oder Grundlinienmodus. Gibt andernfalls das Ausgabefarberegister an.
|
Auslöser
ArgumentError — für einen nicht passenden surfaceSelector -Parameter. Der Wert muss für 2D-Texturen 0 und für Cubemaps 0...5 sein.
| |
ArgumentError — texture wird nicht von der TextureBase-Klasse abgeleitet (entweder Texture- oder CubeTexture-Klassen).
| |
ArgumentError — colorOutputIndex muss eine Ganzzahl zwischen 0 und 3 sein.
| |
ArgumentError — This call requires a Context3D that is created with profile baseline or above (Dieser Aufruf erfordert eine Context3D , die mit dem Standardprofil oder höher erstellt wird).
|
Verwandte API-Elemente
setSamplerStateAt | () | Methode |
public function setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.6, AIR 3.6 |
Textursamplerstatus manuell überschreiben..
Textursamplerstatus wird beim Aufrufen von setProgram
festgelegt. Sie können den Textursamplerstatus jedoch mit dieser Funktion überschreiben. Wenn Sie nicht möchten, dass das Programm den Samplerstatus ändert, setzen Sie das ignoresamnpler
-Bit in AGAL und verwenden Sie diese Funktion.
Parameter
sampler:int — sampler Das zu verwendende Samplerregister. Ist dem Samplerregister in AGAL zugeordnet.
| |
wrap:String — Wrappingmodus. In Context3DWrapMode definiert. Der Standardwert ist „repeat“ (wiederholen).
| |
filter:String — Texturfiltermodus. In Context3DTextureFilter definiert. Der Standardwert ist „nearest“ (nächster).
| |
mipfilter:String — Mipmap-Filter. In Context3DMipFilter definiert. Der Standardwert ist „none“ (ohne).
|
Auslöser
Error — Sampler außerhalb des gültigen Bereichs
| |
Error — Fehlerhafte Aufzählung Wrap, Filter, Mipfilter
| |
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
|
Verwandte API-Elemente
setScissorRectangle | () | Methode |
public function setScissorRectangle(rectangle:Rectangle):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt ein Scherenrechteck fest, was eine Art von Zeichenmaske ist. Der Renderer zeichnet nur in den Bereich innerhalb des Scherenrechtecks. Das Ausschneiden mit Schere hat keine Auswirkungen auf Löschvorgänge.
Übergeben Sie null
, um das Ausschneiden mit Schere auszuschalten.
Parameter
rectangle:Rectangle — Das Rechteck, in das gezeichnet werden soll. Legt die Position und die Abmessungen des Rechtecks in Pixeln fest. Der Ursprung des Koordinatensystems befindet sich in der oberen linken Ecke des Viewports, mit positiven Werten, die nach unten und nach rechts zunehmen (wie beim normalen Flash-Koordinatensystem).
|
Beispiel ( Verwendung dieses Beispiels )
Die Dreiecke werden mithilfe des Vertexbuffers und des Indexbuffers definiert. Der Vertexbuffer enthält die Informationen zu Position und Farbe für jeden Vertex des Dreiecks. Der Indexbuffer enthält Indizes für den Vertexbuffer. Drei Indizes definieren ein Dreieck. Zum Beispiel wird ein Dreieck, das aus den ersten drei Punkten im Vertexbuffer besteht, im Indexbuffer als 0,1,2 aufgeführt.
In diesem einfachen Beispiel wird keine 3D-Transformation ausgeführt. Es werden nur Objekte innerhalb des kanonischen Ansichtsbereichs (ein 2x2x2-Würfelkörper am Ursprungspunkt) angezeigt. Beim Rendern einer typischen 3D-Szene projizieren Sie die Objekte jedoch für das Rendering in diesen Ansichtsbereich, indem Sie entweder eine perspektivische oder orthografische Projektion verwenden.
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 | () | Methode |
public function setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt den Schablonenmodus und -vorgang fest.
Ein 8-Bit-Schablonenreferenzwert kann mit jedem Aufruf von call verknüpft werden. Beim Rendering kann der Referenzwert anhand der zuvor im Bildpuffer gespeicherten Werte getestet werden. Das Ergebnis des Tests kann die Zeichenaktion steuern und bestimmen, ob und wie der gespeicherte Schablonenwert aktualisiert wird. Zusätzlich steuert der Tiefentest, ob Schablonentests ausgeführt werden. Ein fehlgeschlagener Tiefentest kann auch verwendet werden, um die Aktion, die für den Schablonenpuffer ausgeführt wird, zu steuern.
In der Pixelverarbeitungspipeline werden zuerst Tiefentests ausgeführt. Wenn der Tiefentest fehlschlägt, kann eine Updateaktion für den Schablonenpuffer ausgeführt werden, eine weitere Evaluierung des Schablonenpufferwerts ist jedoch nicht möglich. Wenn der Tiefentest erfolgreich verläuft, wird der Schablonentest ausgeführt. Je nach Ergebnis des Schablonentests können verschiedene Aktionen ausgeführt werden.
Der Schablonenreferenzwert wird mithilfe von setStencilReferenceValue()
festgelegt.
Parameter
triangleFace:String (default = "frontAndBack ") — die Dreieckausrichtungen, die zum Schablonenvorgang beitragen können. Eines von Context3DTriangleFace.
| |
compareMode:String (default = "always ") — der Testoperator, der zum Vergleich des aktuellen Schablonenreferenzwerts und des Zielpixelschablonenwerts verwendet wird. Wenn der Vergleich „true“ ist, werden Zielpixelfarbe und -tiefe aktualisiert. Die Schablonenaktionen werden wie in den folgenden Aktionsparametern angefordert ausgeführt. Der Vergleichsoperator wird als ein Infixoperator zwischen dem aktuellen und dem Zielreferenzwert angewendet, in dieser Reihenfolge (in Pseudocode: if stencilReference OPERATOR stencilbuffer then pass ). Verwenden Sie eine der Konstanten, die in der Context3DCompareMode-Klasse definiert sind.
| |
actionOnBothPass:String (default = "keep ") — Aktion, die ausgeführt wird, wenn sowohl Tiefen- als auch Schablonenvergleich bestanden werden. Verwenden Sie eine der Konstanten, die in der Context3DStencilAction-Klasse definiert sind.
| |
actionOnDepthFail:String (default = "keep ") — Aktion, die ausgeführt wird, wenn der Tiefenvergleich fehlschlägt. Verwenden Sie eine der Konstanten, die in der Context3DStencilAction-Klasse definiert sind.
| |
actionOnDepthPassStencilFail:String (default = "keep ") — Aktion, die ausgeführt wird, wenn der Tiefenvergleich erfolgreich ist und der Schablonenvergleich fehlschlägt. Verwenden Sie eine der Konstanten, die in der Context3DStencilAction-Klasse definiert sind.
|
Auslöser
Error — Fehler wegen ungültiger Aufzählung: wenn triangleFace nicht einer der in der Context3DTriangleFace-Klasse definierten Werte ist.
| |
Error — Fehler wegen ungültiger Aufzählung: wenn compareMode nicht einer der in der Context3DCompareMode-Klasse definierten Werte ist.
| |
Error — Fehler wegen ungültiger Aufzählung: wenn actionOnBothPass , actionOnDepthFail oder actionOnDepthPassStencilFail nicht einer der in der Context3DStencilAction-Klasse definierten Werte ist.
|
Verwandte API-Elemente
Beispiel ( Verwendung dieses Beispiels )
- Schablonenpuffer auf 0 leeren.
- Schablonenaktion auf Inkrementieren bei erfolgreichem Schablonentest festlegen.
- Schablonenreferenzwert auf 0 setzen.
- Dreieckige Maske zeichnen. Unabhängig davon, wo das Dreieck gezeichnet wird, verläuft der Schablonentest erfolgreich, da der Schablonenpuffer auf 0 geleert wurde und der Referenzwert 0 ist. Deshalb wird der Schablonenpuffer auf 1 erhöht, wo die Dreiecksmaske gezeichnet wird.
- Schablonenaktion auf „Beibehalten“ ändern, sodass nachfolgende Zeichenvorgänge den Schablonenpuffer nicht ändern.
- Vollbildrechteck zeichnen (mehrfarbig). Da der Schablonenreferenzwert immer noch 0 ist, schlägt der Schablonentest im maskierten Bereich fehl. Deshalb wird das Rechteck überall mit Ausnahme des maskierten Bereichs gezeichnet.
- Schablonenreferenzwert auf 1 ändern.
- Ein weiteres Vollbildrechteck zeichnen (rot). Jetzt schlägt der Schablonentest überall fehl, nur nicht im maskierten Bereich, für den der Wert auf 1 erhöht wurde. Deshalb wird das Rechteck nur im maskierten Bereich gezeichnet.
Bewegen Sie die Maus über das Beispiel, um die Hauptschritte nacheinander zu sehen.
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 | () | Methode |
public function setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Legt den Schablonenvergleichswert fest, der für Schablonentests verwendet wird.
Es werden nur die unteren 8 Bits des Referenzwerts verwendet. Der Schablonenpufferwert ist ebenfalls 8 Bit lang. Verwenden Sie readMask
und writeMask
, um den Schablonenpuffer als Bitfeld zu verwenden.
Parameter
referenceValue:uint — ein 8-Bit-Referenzwert, der in Referenzwertvergleichstests verwendet wird.
| |
readMask:uint (default = 255 ) — eine 8-Bit-Maske, die vor dem Vergleich auf den aktuellen Schablonenpufferwert und den Referenzwert angewendet wird.
| |
writeMask:uint (default = 255 ) — eine 8-Bit-Maske, die vor dem Aktualisieren des Schablonenpuffers auf den Referenzwert angewendet wird.
|
Verwandte API-Elemente
setTextureAt | () | Methode |
public function setTextureAt(sampler:int, texture:flash.display3D.textures:TextureBase):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Gibt die Textur an, die für ein Textureingaberegister eines Fragmentprogramms verwendet werden soll.
Ein Fragmentprogramm kann Informationen aus bis zu acht Texturobjekten lesen. Verwenden Sie diese Funktion, um ein Texture- oder CubeTexture-Objekt einem der vom Fragmentprogramm verwendeten Samplerregister zuzuweisen.
Hinweis: Wenn Sie das aktive Fragmentprogramm (mit setProgram
) zu einem Shader ändern, der weniger Texturen verwendet, setzen Sie die nicht verwendeten Register auf null
:
setTextureAt( 7, null );
Parameter
sampler:int — der Samplerregisterindex, ein Wert zwischen 0 und 7.
| |
texture:flash.display3D.textures:TextureBase — das Texturobjekt, das verfügbar gemacht werden soll, entweder eine Texture- oder eine CubeTexture-Instanz.
|
Weitere Informationen
Verwandte API-Elemente
CubeTexture
setVertexBufferAt | () | Methode |
public function setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11, AIR 3 |
Gibt an, welche Vertexdatenkomponenten einer einzelnen Vertexshaderprogrammeingabe entsprechen.
Verwenden Sie die setVertexBufferAt
-Methode, um festzustellen, welche Komponenten der für jeden Vertex in einem VertexBuffer3D-Puffer definierten Daten zu welchen Eingaben des Vertexprogramms gehören. Der Entwickler des Vertexprogramms bestimmt, wie viele Daten pro Vertex benötigt werden. Diese Daten werden von einem oder mehreren VertexBuffer3D
-Streams den Attributregistern des Vertexprogramms zugeordnet.
Die kleinste Einheit der vom Vertex-Shader verbrauchten Daten sind 32-Bit-Daten. Offsets im Vertexstream werden in Vielfachen von 32 Bits angegeben.
Beispiel: Ein Programmierer kann jeden Vertex mit den folgenden Daten definieren:position: x float32 y float32 z float32 color: r unsigned byte g unsigned byte b unsigned byte a unsigned byteAngenommen, der Vertex wurde in einem VertexBuffer3D mit dem Namen
buffer
definiert, wird er mit dem folgenden Code einem Vertex-Shader zugewiesen:
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
Parameter
index:int — der Index des Attributregisters im Vertexshader (0 bis 7).
| |
buffer:VertexBuffer3D — der Puffer, der die Quellvertexdaten enthält, die in den Vertex-Shader eingegeben werden sollen.
| |
bufferOffset:int (default = 0 ) — ein Offset vom Start der Daten für einen einzelnen Vertex, bei dem mit dem Lesen dieses Attributs begonnen werden soll. Im Beispiel oben haben die Positionsdaten einen Offset von 0, da es sich um das erste Attribut handelt; Farbe hat einen Offset von 3, da das color-Attribut den drei 32-Bit-Positionswerten folgt. Der Offset wird in Einheiten von 32 Bits angegeben.
| |
format:String (default = "float4 ") — ein Wert aus der Context3DVertexBufferFormat-Klasse, der den Datentyp dieses Attributs angibt.
|
Auslöser
Error — Ungültige Aufzählung: wenn das Format nicht einer der in der Context3DVertexBufferFormat-Klasse definierten Werte ist.
| |
RangeError — Attributregister außerhalb des gültigen Bereichs: wenn der index -Parameter außerhalb des Bereichs von 0 bis 7 liegt. (Von einem Shader können höchstens acht Vertexattribute verwendet werden.)
|
Weitere Informationen
Verwandte API-Elemente
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, 10:04 AM Z