Paquete | flash.display3D |
Clase | public final class Context3D |
Herencia | Context3D EventDispatcher Object |
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Un contexto de procesamiento incluye una superficie de dibujo y sus recursos y estado asociados. Cuando sea posible, el contexto del procesamiento utiliza el unidad de procesamiento de gráficos por hardware (GPU). De lo contrario, el contexto de procesamiento utiliza el software. (Si el procesamiento a través Context3D no se admite en una plataforma, la propiedad stage3Ds
del objeto Stage contiene una lista vacía.)
El contexto de procesamiento de Context3D es un pipeline programable muy similar a OpenGL ES 2, pero resumido para que sea compatible con un rango de interfaces de hardware y GPU. Aunque se ha diseñado para gráficos en 3D, el pipeline de procesamiento no rige la tridimensionalidad del procesamiento. Por consiguiente, puede crear un procesador en 2D proporcionando el vértice apropiado y los programas de fragmentos de píxeles. Tanto en el caso del 3D como del 2D, el único valor simple geométrico admitido es el triángulo.
Obtiene una instancia de la clase Context3D llamando al método requestContext3D()
de un objeto Stage3D. Un número limitado de Context3D objetos puede existir en cada escenario; uno para cada Stage3D en la lista Stage.stage3Ds
. Cuando se crea el contexto, el objeto Stage3D distribuye un evento context3DCreate
. Un contexto de procesamiento puede ser destruido y creado de nuevo en cualquier momento, por ejemplo, cuando otra aplicación que usa la GPU queda seleccionada. El código debe anticipar la recepción de varios eventos context3DCreate
. Coloque el área de procesamiento en el escenario con las propiedades x
e y
de la instancia de Stage3D asociada.
Para procesar y mostrar una escena (después de recibir un objeto Context3D), los pasos habituales son los siguientes:
- Configurar los atributos del búfer de visualización principal llamando a
configureBackBuffer()
. - Crear e inicializar los recursos de procesamiento, entre los que se incluyen:
- Búfers de vértice y de índice que definen la geometría de la escena
- Programas de vértices y de píxeles (sombreados) para procesar la escena
- Texturas
- Procesar un fotograma:
- Establezca el estado de procesamiento como adecuado para un objeto o colección de objetos en la escena.
- Llame al método
drawTriangles()
para procesar un conjunto de triángulos. - Cambie el estado de procesamiento para el siguiente grupo de los objetos.
- Llame a
drawTriangles()
para dibujar los triángulos que definen los objetos. - Repita el procedimiento hasta que la escena se procese por completo.
- Llame al
present()
para visualizar la escena procesada en el escenario.
Se aplican los límites siguientes al procesamiento:
Límites de recursos:
Recurso | Número permitido | Memoria total |
---|---|---|
Búfers de vértices
| 4096 | 256 MB |
Búfers de índices
| 4096 | 128 MB |
Programas
| 4096 | 16 MB |
Texturas
| 4096 | 128 MB |
Texturas de cubo
| 4096 | 256 MB |
Límites AGAL: 200 códigos de operación por programa.
Límites de llamada a dibujos: 32.768 llamadas a drawTriangles()
por cada llamada a present()
.
Se aplican los límites siguientes a las texturas:
Límites de textura para AIR de 32 bits:
Textura | Tamaño máximo | Total de memoria de GPU |
---|---|---|
Textura normal (por debajo de la línea de base ampliada)
| 2048 x 2048 | 512 MB |
Textura normal (línea de base ampliada y anterior)
| 4096 x 4096 | 512 MB |
Textura rectangular (por debajo de la línea de base ampliada)
| 2048 x 2048 | 512 MB |
Textura rectangular (línea de base ampliada y anterior)
| 4096 x 4096 | 512 MB |
Textura cúbica
| 1024 x 1024 | 256 MB |
Límites de textura para AIR de 64 bits (escritorio):
Textura | Tamaño máximo | Total de memoria de GPU |
---|---|---|
Textura normal (por debajo de la línea de base ampliada)
| 2048 x 2048 | 512 MB |
Textura normal (línea de base ampliada a estándar)
| 4096 x 4096 | 512 MB |
Textura normal (estándar ampliada y superior)
| 4096 x 4096 | 2048 MB |
Textura rectangular (por debajo de la línea de base ampliada)
| 2048 x 2048 | 512 MB |
Textura rectangular (línea de base ampliada a estándar)
| 4096 x 4096 | 512 MB |
Textura rectangular (estándar ampliada y superior)
| 4096 x 4096 | 2048 MB |
Textura cúbica
| 1024 x 1024 | 256 MB |
512 MB es el límite absoluto para texturas, incluida la memoria de textura necesaria para mipmaps. Sin embargo, para texturas cúbicas, el límite de memoria es de 256 MB.
No se pueden crear objetos Context3D con el constructor Context3D. Se construye y está disponible como una propiedad de una instancia de Stage3D. La clase Context3D puede utilizarse tanto en plataformas de escritorio como para móviles y tanto si se ejecuta en Flash Player como en AIR.
Elementos de API relacionados
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
Propiedad | Definido por | ||
---|---|---|---|
backBufferHeight : int [solo lectura]
Especifica la altura del búfer posterior, que se puede modificar mediante una llamada correcta al método configureBackBuffer(). | Context3D | ||
backBufferWidth : int [solo lectura]
Especifica la anchura del búfer posterior, que se puede modificar mediante una llamada correcta al método configureBackBuffer(). | Context3D | ||
constructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada. | Object | ||
driverInfo : String [solo lectura]
El tipo de controlador de biblioteca de gráficos utilizado por este contexto de procesamiento. | Context3D | ||
enableErrorChecking : Boolean
Especifica si los errores encontrados por el procesador se comunican a la aplicación. | Context3D | ||
maxBackBufferHeight : int
Especifica la altura máxima del búfer posterior. | Context3D | ||
maxBackBufferWidth : int
Especifica la anchura máxima del búfer posterior. | Context3D | ||
profile : String [solo lectura]
El perfil de compatibilidad de característica usado por este objeto Context3D. | Context3D | ||
supportsVideoTexture : Boolean [estática] [solo lectura]
Indica si Context3D admite textura de vídeo. | Context3D | ||
totalGPUMemory : Number [solo lectura]
Devuelve el total de memoria de GPU asignada por las estructuras de datos de Stage3D de una aplicación. Siempre que se crea un objeto de recurso de GPU, la memoria utilizada se almacena en Context3D. | Context3D |
Método | Definido por | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registra un objeto de detector de eventos con un objeto EventDispatcher, de modo que el detector reciba la notificación de un evento. | EventDispatcher | ||
clear(red:Number = 0.0, green:Number = 0.0, blue:Number = 0.0, alpha:Number = 1.0, depth:Number = 1.0, stencil:uint = 0, mask:uint = 0xffffffff):void
Borra el color, la profundidad y búfer de esténcil asociado a este objeto Context3D y los rellena con los valores especificados. | Context3D | ||
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Define las dimensiones del visor y otros atributos del búfer de procesamiento. | Context3D | ||
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Crea un objeto CubeTexture. | Context3D | ||
Crea un objeto IndexBuffer3D. | Context3D | ||
Crea un objeto Program3D. | Context3D | ||
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Crea un objeto Texture rectangular. | Context3D | ||
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Crea un objeto Texture. | Context3D | ||
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Crea un objeto VertexBuffer3D. | Context3D | ||
createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Crea un objeto VertexBuffer3D para datos de las instancias. | Context3D | ||
Crea un objeto VideoTexture. | Context3D | ||
Distribuye un evento en el flujo del evento. | EventDispatcher | ||
Libera todos los recursos y el almacenamiento interno asociado a este Context3D. | Context3D | ||
Dibuja el búfer de procesamiento actual en un mapa de bits. | Context3D | ||
Represente los triángulos especificados utilizando los búfers actuales y el estado de este objeto Context3D. | Context3D | ||
drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Represente los triángulos instanciados especificados utilizando los búferes actuales y el estado de este objeto Context3D. | Context3D | ||
Comprueba si el objeto EventDispatcher tiene detectores registrados para un tipo concreto de evento. | EventDispatcher | ||
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
Muestra la parte posterior del búfer de procesamiento. | Context3D | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Elimina un detector del objeto EventDispatcher. | EventDispatcher | ||
Especifica los factores utilizado para mezclar el color de salida de una operación de dibujo con el color existente. | Context3D | ||
Define la máscara utilizada al escribir colores en el búfer de procesamiento. | Context3D | ||
Establece el modo "culling" de triángulo. | Context3D | ||
Define el tipo de comparación utilizada para pruebas de profundidad. | Context3D | ||
El modo definido de relleno utilizado para el procesamiento. | Context3D | ||
Define programas de vértices y fragmentos para usar en posteriores procesamientos. | Context3D | ||
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Establece constantes para su uso en programas de sombreado con los valores almacenados en un ByteArray. | Context3D | ||
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Establece constantes para su uso en programas de sombreado con los valores almacenados en una Matrix3D. | Context3D | ||
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Define las entradas constantes para programas de sombreado. | Context3D | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
Define la parte posterior del búfer de procesamiento como destino del procesamiento. | Context3D | ||
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Establece la textura especificada como destino de procesamiento. | Context3D | ||
Sustituir manualmente el estado del muestreador de texturas. | Context3D | ||
Define un rectángulo tijera, similar a una máscara de dibujo. | Context3D | ||
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Establece el modo y el funcionamiento del esténcil. | Context3D | ||
Define el valor de comparación del esténcil utilizado para comprobar el esténcil. | Context3D | ||
Especifica la textura que se utiliza para un registro de entrada de texturas de un programa de fragmentos. | Context3D | ||
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Especifica qué componentes de datos de vértices corresponden a una sola entrada del programa de sombreado de vértices. | Context3D | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
Devuelve la representación de cadena del objeto especificado. | Object | ||
Devuelve el valor simple del objeto especificado. | Object | ||
Comprueba si hay registrado un detector de eventos con este objeto EventDispatcher o con cualquiera de sus ascendientes para el tipo de evento concreto. | EventDispatcher |
backBufferHeight | propiedad |
backBufferHeight:int
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 15, AIR 15 |
Especifica la altura del búfer posterior, que se puede modificar mediante una llamada correcta al método configureBackBuffer()
. La altura puede modificarse cuando el factor de zoom del navegador cambia si wantsBestResolutionOnBrowserZoom
se establece en true
en la última llamada correcta al método configureBackBuffer()
. El cambio de altura se puede detectar registrando un detector de eventos para el evento de cambio de zoom del navegador.
Implementación
public function get backBufferHeight():int
Elementos de API relacionados
backBufferWidth | propiedad |
backBufferWidth:int
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 15, AIR 15 |
Especifica la anchura del búfer posterior, que se puede modificar mediante una llamada correcta al método configureBackBuffer()
. La anchura puede modificarse cuando el factor de zoom del navegador cambia si wantsBestResolutionOnBrowserZoom
se establece en true
en la última llamada correcta al método configureBackBuffer()
. El cambio de anchura se puede detectar registrando un detector de eventos para el evento de cambio de zoom del navegador.
Implementación
public function get backBufferWidth():int
Elementos de API relacionados
driverInfo | propiedad |
driverInfo:String
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
El tipo de controlador de biblioteca de gráficos utilizado por este contexto de procesamiento. Indica si la representación utiliza un programa de software, un controlador DirectX o un controlador OpenGL. También indica si ha fallado el procesamiento por hardware. Si falla el procesamiento por hardware, Flash Player utiliza el procesamiento por software para Stage3D y driverInfo
contiene uno de los siguientes valores:
- "Software Hw_disabled=userDisabled": la casilla de verificación Habilitar aceleración de hardware de la interfaz de configuración de Adobe Flash Player no está marcada.
- "Software Hw_disabled=oldDriver": hay problemas conocidos con el hardware del controlador de gráficos. Actualizar el controlador gráfico puede solucionar este problema.
- "Software Hw_disabled=unavailable": hay problemas conocidos con el hardware del controlador de gráficos o errores de inicialización.
- "Software Hw_disabled=explicit": el contenido ha solicitado explícitamente procesamiento por software a través de requestContext3D.
- "Software Hw_disabled=domainMemory": el contenido utiliza domainMemory, que requiere una licencia cuando se utiliza con procesamiento por hardware Stage3D. Visite adobe.com/go/fpl_es.
Implementación
public function get driverInfo():String
enableErrorChecking | propiedad |
enableErrorChecking:Boolean
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Especifica si los errores encontrados por el procesador se comunican a la aplicación.
Cuando enableErrorChecking
es true
, los métodos clear()
y drawTriangles()
son sincrónicos y pueden emitir errores. Cuando enableErrorChecking
es false
(valor predeterminado), los métodos clear()
y drawTriangles()
son asíncronos y no se comunican los errores. Activar la comprobación de errores reduce el rendimiento del procesamiento. Sólo se debe habilitar la comprobación de errores en el proceso de depuración.
Implementación
public function get enableErrorChecking():Boolean
public function set enableErrorChecking(value:Boolean):void
Elementos de API relacionados
maxBackBufferHeight | propiedad |
maxBackBufferHeight:int
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 15, AIR 15 |
Especifica la altura máxima del búfer posterior. El valor inicial es el límite del sistema en la plataforma. La propiedad se puede establecer en un valor inferior o igual a, pero no mayor que, el límite del sistema. La propiedad se puede establecer en un valor mayor o igual que, pero no más pequeño que, el límite mínimo. El límite mínimo es un valor constante, 32, cuando el búfer posterior no se ha configurado. El límite mínimo es el valor del parámetro de altura en la última llamada correcta al método configureBackBuffer()
después que se configura el búfer posterior.
Implementación
public function get maxBackBufferHeight():int
public function set maxBackBufferHeight(value:int):void
maxBackBufferWidth | propiedad |
maxBackBufferWidth:int
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 15, AIR 15 |
Especifica la anchura máxima del búfer posterior. El valor inicial es el límite del sistema en la plataforma. La propiedad se puede establecer en un valor inferior o igual a, pero no mayor que, el límite del sistema. La propiedad se puede establecer en un valor mayor o igual que, pero no más pequeño que, el límite mínimo. El límite mínimo es un valor constante, 32, cuando el búfer posterior no se ha configurado. El límite mínimo es el valor del parámetro de anchura en la última llamada correcta al método configureBackBuffer()
después que se configura el búfer posterior.
Implementación
public function get maxBackBufferWidth():int
public function set maxBackBufferWidth(value:int):void
profile | propiedad |
supportsVideoTexture | propiedad |
totalGPUMemory | propiedad |
totalGPUMemory:Number
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 21, AIR 21 |
Devuelve el total de memoria de GPU asignada por las estructuras de datos de Stage3D de una aplicación.
Siempre que se crea un objeto de recurso de GPU, la memoria utilizada se almacena en Context3D. Esta memoria incluye los búferes de índice, los búferes de vértice, las texturas (excepto las de vídeo) y los programas creados mediante este Context3D.
El parámetro totalGPUMemory
de la API devuelve al usuario el total de memoria consumida por los recursos anteriores. El valor predeterminado devuelto es 0. El total de memoria de GPU devuelto se expresa en bytes. La información solo se proporciona en el modo directo en móvil y en los modos directo y GPU en escritorio. (En un escritorio, el uso de <renderMode>gpu</renderMode>
se revierte a <renderMode>direct</renderMode>
)
Implementación
public function get totalGPUMemory():Number
clear | () | método |
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
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Borra el color, la profundidad y búfer de esténcil asociado a este objeto Context3D y los rellena con los valores especificados.
Establezca el parámetro mask
para especificar qué búfer se borra. Utilice las constantes definidas en la clase Context3DClearMask para definir el parámetro mask
. Utilice el operador OR en modo bit, "|", para añadir varios búfers a la máscara (o use Context3DClearMask.ALL
). Cuando se procesa en la parte posterior del búfer, se debe llamar a configureBackBuffer()
antes de cualquier llamada a clear()
.
Nota: si especifica un parámetro valor fuera del rango permitido, los valores del parámetro Numeric se incluirán de forma silenciosa en el intervalo de cero a uno. Del mismo modo, si stencil
es mayor que 0xff, se establece en 0xff.
Parámetros
red:Number (default = 0.0 ) — el componente rojo del color con el que se borra el búfer de color, en el intervalo de cero a uno.
| |
green:Number (default = 0.0 ) — el componente verde del color con el que se borra el búfer de color, en el intervalo de cero a uno.
| |
blue:Number (default = 0.0 ) — el componente azul del color con el que se borra el búfer de color, en el intervalo de cero a uno.
| |
alpha:Number (default = 1.0 ) — el componente alfa del color con el que se borra el búfer de color, en el intervalo de cero a uno. El componente alfa no se utiliza para la mezcla. Se escribe en el búfer alfa directamente.
| |
depth:Number (default = 1.0 ) — el valor con el que se borra el búfer de profundidad, en el intervalo de cero a uno.
| |
stencil:uint (default = 0 ) — el valor de 8 bits con el que se borrar el búfer de esténcil, en el intervalo de 0x00 a 0xFF.
| |
mask:uint (default = 0xffffffff ) — especifica qué búfer se borra.
|
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.
|
Elementos de API relacionados
configureBackBuffer | () | método |
public function configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Define las dimensiones del visor y otros atributos del búfer de procesamiento.
El procesamiento tiene doble búfer. La parte trasera del búfer se intercambia con la parte delantera visible del búfer cuando se llama a present()
. El tamaño mínimo del búfer es 32 x 32 píxeles. El tamaño máximo del búfer posterior está limitado por las capacidades del dispositivo y también puede configurarlo el usuario a través de las propiedades maxBackBufferHeight
y maxBackBufferWidth
. La configuración del búfer es una operación lenta. Debe evitar cambiar el tamaño del búfer o de los atributos durante operaciones de procesamiento normales.
Parámetros
width:int — anchura, en píxeles, del búfer.
| |||||||||
height:int — altura, en píxeles, del búfer.
| |||||||||
antiAlias:int — un valor entero que especifica la calidad solicitada del suavizado. El valor se corresponde con el número de submuestras utilizadas durante el suavizado. El uso de más submuestras requiere llevar a cabo más cálculos, aunque el modo en que afecta al comportamiento relativo depende del hardware específico de procesamiento. El tipo de suavizado y si se realiza algún tipo de suavizado depende del dispositivo y modo de procesamiento. El suavizado no se admite en el contexto de procesamiento por software.
| |||||||||
enableDepthAndStencil:Boolean (default = true ) — false indica que no hay profundidad o no se crea búfer de esténcil; true crea profundidad y búfer de esténcil. En aplicaciones para AIR 3.2 o versión posterior compiladas con la versión 15 de SWF o posterior, si el elemento renderMode del archivo descriptor de la aplicación es direct , el elemento depthAndStencil del archivo descriptor de la aplicación debe tener el mismo valor que este argumento. De forma predeterminada, el valor del elemento depthAndStencil es false .
| |||||||||
wantsBestResolution:Boolean (default = false ) — true indica que si el dispositivo admite pantallas HiDPI, se intentará asignar un búfer posterior más grande que el indicado con los parámetros width y height. Dado que esto agrega más píxeles y puede modificar el resultado de las operaciones de sombreado, está desactivado de forma predeterminada. Utilice Stage.contentsScaleFactor para determinar en qué medida se ha escalado el búfer posterior nativo.
| |||||||||
wantsBestResolutionOnBrowserZoom:Boolean (default = false ) — true indica que el tamaño del búfer posterior debe incrementar en proporción al aumento del factor de zoom del navegador. El ajuste de este valor es persistente en varios valores de zoom del navegador. El valor predeterminado del parámetro es false . Establezca las propiedades maxBackBufferWidth y maxBackBufferHeight para limitar el aumento del tamaño del búfer posterior. Utilice backBufferWidth ybackBufferHeight para determinar el tamaño actual del búfer posterior.
|
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — Tamaño de entrada incorrecto: el parámetro “width” o “height” es menor que el tamaño permitido de búfer posterior mínimo o mayor que el tamaño permitido de búfer posterior máximo.
| |
Error — 3709: El indicador depthAndStencil del descriptor de la aplicación debe coincidir con el valor booleano enableDepthAndStencil transferido a configureBackBuffer() en el objeto Context3D.
|
createCubeTexture | () | método |
public function createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Crea un objeto CubeTexture.
Utilice un objeto CubeTexture para cargar mapas de bits de texturas cúbicas para el contexto de procesamiento y para hacer referencia a una textura cúbica durante el procesamiento. Una textura cúbica consta de seis texturas cuadradas de igual tamaño dispuestas en una topología cúbica y resulta útil para describir mapas de entorno.
No se pueden crear objetos CubeTexture con un constructor CubeTexture; utilice este método en su lugar. Después de crear un objeto CubeTexture, cargue los datos de textura de mapa de bits con los métodos uploadFromBitmapData()
, uploadFromByteArray()
o uploadCompressedTextureFromByteArray()
CubeTexture.
Parámetros
size:int — La longitud del borde de la textura, en texels.
| |
format:String — El formato texel de la lista enumerada Context3DTextureFormat.
La compresión de texturas permite guardar imágenes de textura en formato comprimido directamente en la GPU, ahorrando así memoria de GPU y ancho de banda de memoria. Normalmente, las texturas comprimidas se comprimen sin conexión y se cargan en la GPU en formato comprimido mediante el método de Texture.uploadCompressedTextureFromByteArray. Flash Player 11.4 y AIR 3.4 en plataformas de escritorio añadieron compatibilidad para compresión de texturas en tiempo de ejecución, lo que puede resultar útil en determinados casos como, por ejemplo al representar texturas dinámicas de gráficos vectoriales. Tenga en cuenta que esta función no está disponible en plataformas móviles y que en su lugar se generará un ArgumentError (El formato de textura no coincide). Para utilizar la compresión de texturas en tiempo de ejecución, lleve a cabo estos pasos: 1. Cree el objeto de textura llamando al método Context3D.createCubeTexture(), transfiriendo flash.display3D.Context3DTextureFormat.COMPRESSED o flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA como el parámetro de formato. 2. Usando la instancia flash.display3D.textures.Texture devuelta por createCubeTexture(), llame a flash.display3D.textures.CubeTexture.uploadFromBitmapData() o flash.display3D.textures.CubeTexture.uploadFromByteArray() para cargar y comprimir la textura en un paso. | |
optimizeForRenderToTexture:Boolean — Establézcalo en true si la textura se utilizará como destino de procesamiento.
| |
streamingLevels:int (default = 0 ) — El nivel de mapa MIP que debe cargarse antes de que la imagen se procese. La transmisión de texturas ofrece la capacidad para cargar y mostrar primero los niveles MIP más pequeños, y mostrar progresivamente imágenes de mayor calidad a medida que se cargan las texturas. Los usuarios finales pueden ver imágenes de menor calidad en una aplicación mientras se cargan las imágenes de mayor calidad.
De forma predeterminada, streamingLevels es 0, lo que significa que, antes de que se represente la imagen, se debe cargar la imagen de mayor calidad en el mapa MIP. Este parámetro se añadió en Flash Player 11.3 y AIR 3.3. Usar el valor predeterminado mantiene el comportamiento de las versiones anteriores de Flash Player y AIR. Establezca Nota: establecer esta propiedad en un valor > 0 puede afectar al rendimiento y al uso de memoria. |
flash.display3D.textures:CubeTexture |
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de textura o si se supera la cantidad de memoria asignada a las texturas.
| |
ArgumentError — Profundidad textura no implementada: si se intenta crear una textura de profundidad.
| |
ArgumentError — El tamaño de la textura es cero: si el parámetro size no es mayor que cero.
| |
ArgumentError — La textura no es potencia de dos: si el parámetro size no es una potencia de dos.
| |
ArgumentError — Textura demasiado grande: si el parámetro size es mayor que 1024.
| |
Error — No se ha podido crear la textura: si el objeto CubeTexture no se ha podido crear por el contexto de representación (aunque la información sobre el motivo no esté disponible).
| |
ArgumentError — Nivel de transmisión válido: si streamingLevels es mayor o igual que log2(size).
|
Elementos de API relacionados
createIndexBuffer | () | método |
public function createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Crea un objeto IndexBuffer3D.
Utilice un objeto IndexBuffer3D para cargar un conjunto de índices de triángulo para el contexto de procesamiento y que haga referencia a dicho conjunto de índices para el procesamiento. Cada índice en el búfer de índices correspondiente hace referencia a un vértice del búfer de vértices. Cada conjunto de tres índices identifica un triángulo. Transfiera el objeto IndexBuffer3D al método drawTriangles()
para representar uno o más triángulos definidos en el búfer de índices.
No se pueden crear objetos IndexBuffer3D con el constructor de la clase IndexBuffer3D; utilice este método en su lugar. Después de crear un objeto IndexBuffer3D, cargue los índices utilizando los métodos uploadFromVector()
o uploadFromByteArray()
IndexBuffer3D.
Parámetros
numIndices:int — el número de vértices que debe almacenarse en el búfer.
| |
bufferUsage:String (default = "staticDraw ") — el uso previsto del búfer. Utilice una de las constantes definidas en Context3DBufferUsage . El controlador de hardware puede realizar una optimización adecuada cuando se lo configura correctamente. Este parámetro solo está disponible en versiones posteriores a Flash 12/AIR 4.
|
IndexBuffer3D |
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — Se ha superado el límite de recursos: si se crean demasiados búfer de índices o si se supera la cantidad de memoria asignada a los búfer de índices.
| |
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.
| |
ArgumentError — Búfer demasiado grande: cuandonumIndices es mayor o igual que 0xf0000.
|
Elementos de API relacionados
createProgram | () | método |
public function createProgram():Program3D
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Crea un objeto Program3D.
Utilice un objeto Program3D para cargar programas de sombreado para el contexto de procesamiento y para hacer referencia a programas cargados durante el procesamiento. Un objeto Program3D almacena dos programas, un programa de vértices y un programa de fragmentos (también conocido como programa de píxeles). Los programas están escritos en un lenguaje ensamblador de sombreado binario.
No se pueden crear objetos Program3D con un constructor Program3D; utilice este método en su lugar. Después de crear un objeto Program3D, cargue los programas usando el método upload()
Program3D.
Program3D |
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — El número de programas supera 4096 o el tamaño total de la memoria supera 16 MB (utilice dispose para liberar recursos de Program3D).
|
Elementos de API relacionados
Ejemplo ( Cómo utilizar este ejemplo )
rendercontext
, es una instancia de la clase Context3D. Los programas en el ejemplo se han escrito en Adobe Graphics Assembly Language (AGAL).
//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 | () | método |
public function createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11.8, AIR 3.8 |
Crea un objeto Texture rectangular.
Utilice un objeto RectangleTexture para cargar mapas de bits de texturas para el contexto de procesamiento y para hacer referencia a una textura durante el procesamiento.
No se pueden crear objetos RectangleTexture con un constructor RectangleTexture; utilice este método en su lugar. Después de crear un objeto RectangleTexture, cargue los mapas de bits de texturas con los métodos Texture uploadFromBitmapData()
o uploadFromByteArray()
.
Tenga en cuenta que las texturas de enteros de 32 bits se almacenan en un formato BGRA empaquetado para que coincida con el formato BitmapData
de Flash. Las texturas de coma utilizan un formato RGBA convencional.
Las texturas de rectángulo son diferentes de las texturas normales en 2D: su altura y su anchura no son potencias de dos. Además, no contienen mapas MIP. Son más útiles para su uso en procesamiento de texturas. Si la textura del rectángulo se utiliza con una muestra que utiliza filtros de mapas MIP o repetición de ajuste, la llamada drawTriangles fallará. La textura de rectángulo tampoco permite la transmisión. Los únicos formatos de textura admitidos por las texturas de rectángulo son BGRA, BGR_PACKED, BGRA_PACKED. Los formatos de textura comprimida no se admiten en texturas de rectángulo.
Parámetros
width:int — La anchura de la textura en texels.
| |
height:int — La altura de la textura en texels.
| |
format:String — El formato texel de la lista enumerada Context3DTextureFormat.
| |
optimizeForRenderToTexture:Boolean — Establézcalo en true si la textura se utilizará como destino de procesamiento.
|
flash.display3D.textures:RectangleTexture |
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de textura o si se supera la cantidad de memoria asignada a las texturas.
| |
ArgumentError — El tamaño de la textura es cero: si los parámetros width y height no son mayores que cero.
| |
ArgumentError — Textura demasiado grande: si el parámetro width o height es mayor que 2048.
| |
Error — No se ha podido crear textura: si el objeto Texture no se ha podido crear por el contexto del procesamiento (aunque la información sobre el motivo no esté disponible).
| |
Error — Requiere perfil de línea de base o superior: si la textura rectangular se crea con el perfil restringido de línea base.
|
Elementos de API relacionados
createTexture | () | método |
public function createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Crea un objeto Texture.
Utilice un objeto Texture para cargar mapas de bits de texturas para el contexto de procesamiento y para hacer referencia a una textura durante el procesamiento.
No se pueden crear objetos Texture con una constructor Texture; utilice este método en su lugar. Después de crear un objeto Texture, cargue los mapas de bits de texturas con los métodos uploadFromBitmapData()
, uploadFromByteArray()
o uploadCompressedTextureFromByteArray()
Texture.
Tenga en cuenta que las texturas de enteros de 32 bits se almacenan en un formato BGRA empaquetado para que coincida con el formato BitmapData
de Flash. Las texturas de coma utilizan un formato RGBA convencional.
Parámetros
width:int — La anchura de la textura en texels.
| |
height:int — La altura de la textura en texels.
| |
format:String — El formato texel de la lista enumerada Context3DTextureFormat.
La compresión de texturas permite guardar imágenes de textura en formato comprimido directamente en la GPU, ahorrando así memoria de GPU y ancho de banda de memoria. Normalmente, las texturas comprimidas se comprimen sin conexión y se cargan en la GPU en formato comprimido mediante el método de Texture.uploadCompressedTextureFromByteArray. Flash Player 11.4 y AIR 3.4 en plataformas de escritorio añadieron compatibilidad para compresión de texturas en tiempo de ejecución, lo que puede resultar útil en determinados casos como, por ejemplo al representar texturas dinámicas de gráficos vectoriales. Tenga en cuenta que esta función no está disponible en plataformas móviles y que en su lugar se generará un ArgumentError (El formato de textura no coincide). Para utilizar la compresión de texturas en tiempo de ejecución, lleve a cabo estos pasos: 1. Cree el objeto de textura llamando al método Context3D.createTexture(), transfiriendo flash.display3D.Context3DTextureFormat.COMPRESSED o flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA como el parámetro de formato. 2. Con la instancia flash.display3D.textures.Texture devuelta por createTexture(), llame a flash.display3D.textures.Texture.uploadFromBitmapData() o flash.display3D.textures.Texture.uploadFromByteArray() para cargar y comprimir la textura en un paso. | |
optimizeForRenderToTexture:Boolean — Establézcalo en true si la textura se utilizará como destino de procesamiento.
| |
streamingLevels:int (default = 0 ) — El nivel de mapa MIP que debe cargarse antes de que la imagen se procese. La transmisión de texturas ofrece la capacidad para cargar y mostrar primero los niveles MIP más pequeños, y mostrar progresivamente imágenes de mayor calidad a medida que se cargan las texturas. Los usuarios finales pueden ver imágenes de menor calidad en una aplicación mientras se cargan las imágenes de mayor calidad.
De forma predeterminada, streamingLevels es 0, lo que significa que, antes de que se represente la imagen, se debe cargar la imagen de mayor calidad en el mapa MIP. Este parámetro se añadió en Flash Player 11.3 y AIR 3.3. Usar el valor predeterminado mantiene el comportamiento de las versiones anteriores de Flash Player y AIR. Establezca Nota: establecer esta propiedad en un valor > 0 puede afectar al rendimiento y al uso de memoria. |
flash.display3D.textures:Texture |
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de textura o si se supera la cantidad de memoria asignada a las texturas.
| |
ArgumentError — Profundidad textura no implementada: si se intenta crear una textura de profundidad.
| |
ArgumentError — El tamaño de la textura es cero: si tanto los parámetros width como height no son mayores que cero.
| |
ArgumentError — La textura no es potencia de dos: si tanto los parámetros width como height no son potencia de dos.
| |
ArgumentError — Textura demasiado grande: si el parámetro width o height es mayor que 2048 para la línea de base y el perfil restringido de línea base, o si el parámetro width oheight es mayor que 4096 para el perfil de línea base ampliada y superior.
| |
Error — No se ha podido crear la textura: si el objeto Texture no se ha podido crear por el contexto de representación (aunque la información sobre el motivo no esté disponible).
| |
ArgumentError — Nivel de transmisión válido: si streamingLevels es mayor o igual que log2(min(width,height)).
|
Elementos de API relacionados
createVertexBuffer | () | método |
public function createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Crea un objeto VertexBuffer3D.
Utilice un objeto VertexBuffer3D para cargar un conjunto de datos de vértices para el contexto de procesamiento. Un búfer de vértices contiene los datos necesarios para representar cada punto de geometría de la escena. Los atributos de datos asociados a cada vértice normalmente incluyen coordenadas de posición, de color y de textura, y sirven como entrada para el programa de sombreado de vértices. Identifique los valores de datos que corresponden a una de las entradas para el programa de vértices con el método setVertexBufferAt()
. Se pueden especificar hasta 64 valores de 32 bits para cada vértice.
No se pueden crear objetos VertexBuffer3D con un constructor VertexBuffer3D; utilice este método en su lugar. Después de crear un objeto VertexBuffer3D, cargue el vértice datos con los métodos uploadFromVector()
o uploadFromByteArray()
VertexBuffer3D.
Parámetros
numVertices:int — el número de vértices que debe almacenarse en el búfer. El número máximo de vértices en un único búfer es 65535.
| |
data32PerVertex:int — el número de valores de datos de 32 bits (4 bytes) asociados a cada vértice. El número máximo de datos de 32 bits por vértice es 64 (o 256 bytes). Es preciso tener en cuenta que sólo se puede acceder a ocho registros de atributos mediante un programa de sombreado de vértices en un momento dado. Utilice SetVertextBufferAt( para seleccionar atributos desde dentro de un búfer de vértices.
| |
bufferUsage:String (default = "staticDraw ") — el uso previsto del búfer. Utilice una de las constantes definidas en Context3DBufferUsage . El controlador de hardware puede realizar una optimización adecuada cuando se lo configura correctamente. Este parámetro solo está disponible en versiones posteriores a Flash 12/AIR 4
|
VertexBuffer3D |
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de búfer de vértices o si se supera la cantidad de memoria asignada a los búfer de vértices.
| |
ArgumentError — Búfer demasiado grande: cuando numVertices es mayor que 0x10000 o data32PerVertex es mayor que 64.
| |
ArgumentError — El búfer tiene tamaño cero: cuando numVertices es cero o data32PerVertex es cero.
| |
ArgumentError — No se ha podido crear búfer: si el objeto VertexBuffer3D no se ha podido crear por el contexto del procesamiento (aunque la información adicional sobre el motivo no esté disponible).
| |
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.
|
Elementos de API relacionados
Ejemplo ( Cómo utilizar este ejemplo )
setVertexBufferAt()
para especificar que los tres primeros puntos de datos se transfieren al programa de vértices como 3 valores de coma flotante en va0 y que los segundos tres puntos de datos se transfieren como va1. Un programa de vértices puede tener hasta 8 entradas, también conocidas como registros de atributos de vértices, definidas del modo siguiente.
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 | () | método |
public function createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 20.0 |
Crea un objeto VertexBuffer3D para datos de las instancias.
Utilice un objeto VertexBuffer3D para cargar un conjunto de datos de instancias para el contexto de procesamiento. El búfer de vértices contiene los datos necesarios para representar cada instancia de geometría de la escena. Los búferes de vértices con datos de instancia proporcionan los atributos comunes a todos los vértices de una instancia y sirven como entrada para el programa de sombreado de vértices. Identifique los valores de datos que corresponden a una de las entradas para el programa de vértices con el método setVertexBufferAt()
. Se pueden especificar hasta sesenta y cuatro valores de 32 bits para cada elemento de búfer de vértices.
No se pueden crear objetos VertexBuffer3D con un constructor VertexBuffer3D; utilice este método en su lugar. Después de crear un objeto VertexBuffer3D, cargue el vértice datos con los métodos uploadFromVector()
o uploadFromByteArray()
VertexBuffer3D.
Parámetros
numVertices:int — el número de elementos que debe almacenarse en el búfer. El número máximo de elementos en un único búfer es 65535.
| |
data32PerVertex:int — el número de valores de datos de 32 bits (4 bytes) asociados a cada elemento. El número máximo de datos de 32 bits por vértice es 64 (o 256 bytes).
| |
instancesPerElement:int — el número de instancias que van a utilizar un elemento del búfer de vértices.
| |
bufferUsage:String (default = "staticDraw ") — el uso previsto del búfer. Utilice una de las constantes definidas en Context3DBufferUsage . El controlador de hardware puede realizar una optimización adecuada cuando se lo configura correctamente. Este parámetro solo está disponible en versiones posteriores a Flash 12/AIR 4
|
VertexBuffer3D |
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de búfer de vértices o si se supera la cantidad de memoria asignada a los búfer de vértices.
| |
ArgumentError — Búfer demasiado grande: cuando numVertices es mayor que 0x10000 o data32PerVertex es mayor que 64.
| |
ArgumentError — El búfer tiene tamaño cero: cuando numVertices es cero o data32PerVertex es cero.
| |
ArgumentError — No se ha podido crear búfer: si el objeto VertexBuffer3D no se ha podido crear por el contexto del procesamiento (aunque la información adicional sobre el motivo no esté disponible).
| |
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.
| |
Error — Requiere perfil ampliado estándar o superior: si se llama a este método cuando el perfil solicitado es menor que el perfil ampliado estándar.
| |
Error — Instancias no válidas por elemento: si el parámetro instancesPerElement no es mayor que cero.
|
Elementos de API relacionados
createVideoTexture | () | método |
public function createVideoTexture():flash.display3D.textures:VideoTexture
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 17.0, Flash Player 18.0 |
Crea un objeto VideoTexture.
Utilice un objeto VideoTexture para obtener los fotogramas de vídeo como textura de un objeto NetStream o Camera y cargar los fotogramas de vídeo al contexto de procesamiento.
El objeto VideoTexture no se puede crear con el constructor de VideoTexture; utilice este método en su lugar. Tras crear un objeto VideoTexture, añada el objeto NetStream o el objeto Camera para obtener los fotogramas de vídeo con los métodos VideoTexture attachNetStream()
o attachCamera()
.
Observe que este método devuelve null si el sistema no admite esta función.
VideoTexture no contiene mapas MIP. Si se utiliza VideoTexture con una muestra que utiliza filtros de mapas MIP o ajuste repetido, la llamada drawTriangles fallará. Los sombreados pueden tratar VideoTexture como textura BGRA. La creación del objeto VideoTexture fallará si Context3D se ha solicitado con el modo de procesamiento de sotfware.
Hay un máximo de 4 objetos VideoTexture disponibles por cada instancia de Context3D. En dispositivos móviles, el número real de objetos VideoTexture admitidos puede ser inferior a 4 debido a las limitaciones de la plataforma.
Valor devueltoflash.display3D.textures:VideoTexture |
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de textura o si se supera la cantidad de memoria asignada a las texturas.
| |
Error — No se ha podido crear la textura: si el objeto Texture no se ha podido crear por el contexto de representación (aunque la información sobre el motivo no esté disponible).
|
dispose | () | método |
public function dispose(recreate:Boolean = true):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Libera todos los recursos y el almacenamiento interno asociado a este Context3D.
Todos los búferes de índices, de vértices, texturas, y programas creados a través de este Context3D se eliminan del mismo modo que si llama a dispose()
en cada uno de ellos de forma individual. Además, el propio Context3D se elimina para liberar todos los búferes temporales y posteriores. Si llama a configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer(), o a drawToBitmapData() tras haber llamado a dispose(), el motor de ejecución emite una excepción.
Advertencia: Si se llama a “dispose()” en un Context3D cuando todavía hay definido un detector de eventos para Events.CONTEXT3D_CREATE en el objeto Stage3D asociado, la llamada simulará una pérdida del dispositivo. Creará un nuevo Context3D en el Stage3D y emitirá el evento Events.CONTEXT3D_CREATE de nuevo. No es aconsejable quitar el detector de eventos del objeto Stage3D antes de llamar a dispose() o establecer el parámetro recreate en false.
Parámetros
recreate:Boolean (default = true )
|
Elementos de API relacionados
flash.display.Stage3D
drawToBitmapData | () | método |
public function drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 3 |
Dibuja el búfer de procesamiento actual en un mapa de bits.
El contenido actual de la parte posterior del búfer de procesamiento se copian a un objeto BitmapData. Se trata de una operación potencialmente muy lenta que se puede tardar hasta un segundo. Úsela con cuidado Tenga en cuenta que esta función no copia del búfer de procesamiento (el que se muestra en el escenario), sino en el que se está dibujando. Para capturar la imagen procesada tal como aparece en el escenario, llame a drawToBitmapData()
inmediatamente antes de llamar a present()
.
Desde el lanzamiento de AIR 25, se han introducido dos nuevos parámetros en la API drawToBitmapData()
. Esta API ahora utiliza tres parámetros. El primero es el parámetro existente destination:BitmapData
. El segundo parámetro es srcRect:Rectangle
, que corresponde al rectángulo de destino en stage3D. El tercer parámetro es destPoint:Point
, que corresponde a la coordenada del mapa de bits de destino. Los parámetros srcRect y destPoint son opcionales, y sus valores predeterminados son (0,0,bitmapWidth,bitmapHeight) y (0,0), respectivamente.
Cuando se dibuja la imagen, no se escala para adaptarlo al mapa de bits. En su lugar, el contenido se ajusta al tamaño del mapa de bits de destino.
Los objetos BitmapData de Flash almacenan colores ya multiplicados por el componente alfa. Por ejemplo, si los componentes de color RGB “puros” de un píxel son (0X0, 0x12, 0xBB) y el componente alfa es 0x7F (0.5), el píxel se almacena en el objeto BitmapData con los valores rgba: (0x05, 0x09, 0x5D, 0x7F). Se pueden establecer los factores de mezcla de modo que los colores procesados en el búfer se multiplican por alfa o realizan la operación en el sombreador de fragmentos. El contexto de procesamiento no valida que los colores se almacenen en formato premultiplicado.
Parámetros
destination:BitmapData | |
srcRect:Rectangle (default = null )
| |
destPoint:Point (default = null )
|
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.
| |
Error — 3802: Si alguno de los parámetros destPoint:Point o srcRect:Rectangle está fuera del límite de coordenadas de bitmap/stage3D o si los valores non-Neumeric(NaN) se proporcionan como valores de entrada.
|
Ejemplo ( Cómo utilizar este ejemplo )
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 | () | método |
public function drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Represente los triángulos especificados utilizando los búfers actuales y el estado de este objeto Context3D.
Para cada triángulo, los vértices del triángulo se procesan con el programa de sombreado de vértices y se procesa la superficie del triángulo con el programa de sombreado de píxeles. Se dibuja el color de salida para cada píxel desde el programa de píxeles para procesar el destino en función de las operaciones del esténcil, la prueba de profundidad, el alfa de origen y de destino, y el modo modo de mezcla actual. El destino de procesamiento puede ser el buffer de procesamiento principal o una textura.
Si la técnica "culling" está activada, (con el método setCulling()
), se pueden eliminar triángulos de la escena antes de que se ejecute el programa de píxeles. Si están activadas las pruebas de esténcil y de profundidad, los píxeles de salida desde el programa de píxeles se pueden eliminar sin actualizar el destino del procesamiento. Además, el programa de píxeles puede decidir no producir un color para un píxel.
Los triángulos procesados no se muestran en el visor hasta que se llama al método present()
. Después de cada llamada a present()
, se debe llamar al método clear()
antes de la primera llamada a drawTriangles()
o el procesamiento fallará.
Si enableErrorChecking
es false
, esta función se devuelve inmediatamente, no espera a los resultados y emite excepciones sólo si esta instancia de COntext3D se ha eliminado o hay demasiadas llamadas de dibujo. Si el estado del contexto de procesamiento no es válido, el procesamiento falla silenciosamente. Si la propiedad enableErrorChecking
es true
, esta función se devuelve después de dibujar los triángulos y emite excepciones para errores de dibujo o estados de contexto no válidos.
Parámetros
indexBuffer:IndexBuffer3D — un conjunto de índices de vértice que hace referencia a los vértices que se van a procesar.
| |
firstIndex:int (default = 0 ) — el índice del primer índice de vértice seleccionado para procesar. Valor predeterminado 0.
| |
numTriangles:int (default = -1 ) — el número de triángulos para procesar. Cada triángulo consume tres índices. Transfiera -1 para dibujar todos los triángulos en el búfer del índice. Valor predeterminado -1.
|
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — Si se llama a este método demasiadas veces entre las llamadas a present() . El número máximo de las llamadas se 32.768.
Los errores siguientes sólo se emiten cuando la propiedad | |
Error — Se debe borrar para poder dibujar: si el búfer no se ha borrado desde la última llamada a present() .
| |
Error — Si un objeto Program3D válido no está establecido.
| |
Error — No hay ningún índice de búfer válido establecido: si no está establecido ningún objeto IndexBuffer3D.
| |
Error — Comprobación de integridad en parámetros que han fallado: si el número de triángulos que se dibujarán o firstIndex superan los valores permitidos.
| |
RangeError — No hay índices suficientes en este búfer: si no hay suficientes índices en el búfer para definir el número de triángulos que se dibujan.
| |
Error — La muestra vincula la textura también vinculada al procesamiento: si el destino de procesamiento es una textura y dicha textura se asigna a una entrada de textura del programa de fragmentos actual.
| |
Error — La muestra vincula una textura no válida: una textura no válida se especifica como entrada del programa de fragmentos actual.
| |
Error — El formato de muestra no coincide con el formato de textura: si la textura asignada como entrada del programa de fragmentos actual tiene un formato diferente al que se especificó para el registro de muestras. Por ejemplo, una textura 2D se asigna a un muestreador de textura cúbica.
| |
Error — La muestra vincula una textura no definida: el programa de fragmentos actual accede a un registro de texturas que no se ha definido (con setTextureAt() ).
| |
Error — La misma textura necesita los mismos parámetros de muestreador: si una textura se utiliza para más de un registro de muestras, todos los muestreadores deben tener los mismos ajustes. Por ejemplo, no es posible establecer un muestreador para fijar y otro para ajustar.
| |
Error — Textura vinculada pero no utilizada: una textura se define como entrada de sombreador, pero no se utiliza.
| |
Error — El flujo no se utiliza: un búfer de vértices se asigna a una entrada de atributos de vértices, pero el programa de vértices no hace referencia al registro correspondiente.
| |
Error — El flujo no es válido: un objeto VertexBuffer3D asignado a una entrada de programa de vértices no es un objeto válido.
| |
RangeError — El flujo no dispone de suficiente vértices: un búfer de vértices que suministra datos para dibujar los triángulos especificados no tiene suficientes datos.
| |
RangeError — Desplazamiento de flujo de vértices fuera de los límites: el desplazamiento especificado en una llamada a setVertexBufferAt() es negativo o va más allá del final del búfer.
| |
Error — El flujo se lee pero no se define: un atributo de vértice que se utiliza en el programa de vértices actual no está definido (con setVertexBufferAt() ).
|
Elementos de API relacionados
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Ejemplo ( Cómo utilizar este ejemplo )
Los triángulos están definidos mediante el búfer de vértices y el búfer de índices. El búfer de vértices contiene la posición y la información de color para cada vértice del triángulo. El búfer de índices contiene índices del búfer de vértices. Un triángulo se define mediante tres índices. Por ejemplo, un triángulo formado por los tres primeros puntos en el búfer de vértices se muestra como 0,1,2 en el búfer de índices.
En este sencillo ejemplo, se lleva a cabo transformación 3D. Sólo se pueden visualizar los objetos en el área de visualización canónica (unidad de volumen 2x2x1) y las coordenadas de los triángulos se definen para estar dentro de esta área. Sin embargo, al procesar una escena típica en 3D, se proyectan los objetos que se van a procesar desde el sistema de coordenadas “real” a esta área de visualización mediante una proyección ortográfica o de perspectiva.
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 | () | método |
public function drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 20.0 |
Represente los triángulos instanciados especificados utilizando los búferes actuales y el estado de este objeto Context3D.
Para cada triángulo de cada instancia, los vértices del triángulo se procesan con el programa de sombreado de vértices y se procesa la superficie del triángulo con el programa de sombreado de píxeles. Se dibuja el color de salida para cada píxel desde el programa de píxeles para procesar el destino en función de las operaciones del esténcil, la prueba de profundidad, el alfa de origen y de destino, y el modo modo de mezcla actual. El destino de procesamiento puede ser el buffer de procesamiento principal o una textura.
Si la técnica "culling" está activada, (con el método setCulling()
), se pueden eliminar triángulos de la escena antes de que se ejecute el programa de píxeles. Si están activadas las pruebas de esténcil y de profundidad, los píxeles de salida desde el programa de píxeles se pueden eliminar sin actualizar el destino del procesamiento. Además, el programa de píxeles puede decidir no producir un color para un píxel.
Los triángulos instanciados procesados no se muestran en el visor hasta que se llama al método present()
. Después de cada llamada a present()
, se debe llamar al método clear()
antes de la primera llamada a drawTriangles()
o el procesamiento fallará.
Si enableErrorChecking
es false
, esta función se devuelve inmediatamente, no espera a los resultados y emite excepciones sólo si esta instancia de COntext3D se ha eliminado o hay demasiadas llamadas de dibujo. Si el estado del contexto de procesamiento no es válido, el procesamiento falla silenciosamente. Si la propiedad enableErrorChecking
es true
, esta función se devuelve después de dibujar los triángulos y emite excepciones para errores de dibujo o estados de contexto no válidos.
Este método puede generar una excepción si el búfer instanciado se ordena de forma incorrecta con SetVertexAt()
. Por ejemplo, con Direct 3D 9, los datos de geometría indexados y el número de instancias que deben dibujarse siempre deben configurarse con flujo cero mediante la API SetStreamSourceFreq()
.
Esto significa que el búfer de vértices creado mediante CreateVertexBufferForInstance()
no debe colocarse con el número de índice mínimo que se establece mediante SetVertexBufferAt()
como entrada para el programa de sombreado de vértices. El búfer de vértices generado mediante CreateVertexBuffer()
debe colocarse con un número de índice menor que el de CreateVertexBufferForInstance()
. En general, los datos de geometría deben colocarse antes de los datos de cada instancia, mediante SetVertexBufferAt()
.
Parámetros
indexBuffer:IndexBuffer3D — un conjunto de índices de vértice que hace referencia a los vértices que se van a representar.
| |
numInstances:int — número de instancias que se va a procesar.
| |
firstIndex:int (default = 0 ) — el índice del primer índice de vértice seleccionado para procesar. Valor predeterminado 0.
| |
numTriangles:int (default = -1 ) — el número de triángulos para procesar. Cada triángulo consume tres índices. Transfiera -1 para dibujar todos los triángulos en el búfer del índice. Valor predeterminado -1.
|
Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
| |
Error — Si se llama a este método demasiadas veces entre las llamadas a present() . El número máximo de las llamadas se 32.768.
| |
Error — Requiere perfil ampliado estándar o superior: si se llama a este método cuando el perfil solicitado es menor que el perfil ampliado estándar.
| |
Error — Si se llama a este método con numInstances negativos.
Los errores siguientes sólo se emiten cuando la propiedad | |
Error — Se debe borrar para poder dibujar: si el búfer no se ha borrado desde la última llamada a present() .
| |
Error — Si un objeto Program3D válido no está establecido.
| |
Error — No hay ningún índice de búfer válido establecido: si no está establecido ningún objeto IndexBuffer3D.
| |
Error — Comprobación de integridad en parámetros que han fallado: si el número de triángulos que se dibujarán o firstIndex superan los valores permitidos.
| |
RangeError — No hay índices suficientes en este búfer: si no hay suficientes índices en el búfer para definir el número de triángulos que se dibujan.
| |
Error — La muestra vincula la textura también vinculada al procesamiento: si el destino de procesamiento es una textura y dicha textura se asigna a una entrada de textura del programa de fragmentos actual.
| |
Error — La muestra vincula una textura no válida: una textura no válida se especifica como entrada del programa de fragmentos actual.
| |
Error — El formato de muestra no coincide con el formato de textura: si la textura asignada como entrada del programa de fragmentos actual tiene un formato diferente al que se especificó para el registro de muestras. Por ejemplo, una textura 2D se asigna a un muestreador de textura cúbica.
| |
Error — La muestra vincula una textura no definida: el programa de fragmentos actual accede a un registro de texturas que no se ha definido (con setTextureAt() ).
| |
Error — La misma textura necesita los mismos parámetros de muestreador: si una textura se utiliza para más de un registro de muestras, todos los muestreadores deben tener los mismos ajustes. Por ejemplo, no es posible establecer un muestreador para fijar y otro para ajustar.
| |
Error — Textura vinculada pero no utilizada: una textura se define como entrada de sombreador, pero no se utiliza.
| |
Error — El flujo no se utiliza: un búfer de vértices se asigna a una entrada de atributos de vértices, pero el programa de vértices no hace referencia al registro correspondiente.
| |
Error — El flujo no es válido: un objeto VertexBuffer3D asignado a una entrada de programa de vértices no es un objeto válido.
| |
RangeError — El flujo no dispone de suficiente vértices: un búfer de vértices que suministra datos para dibujar los triángulos especificados no tiene suficientes datos.
| |
RangeError — Desplazamiento de flujo de vértices fuera de los límites: el desplazamiento especificado en una llamada a setVertexBufferAt() es negativo o va más allá del final del búfer.
| |
Error — El flujo se lee pero no se define: un atributo de vértice que se utiliza en el programa de vértices actual no está definido (con setVertexBufferAt() ).
| |
Error — El flujo de búfer de vértices no contiene elementos suficientes para instancias: Si un flujo de búfer de vértices no contiene suficientes elementos para el número de instancias.
| |
Error — El flujo de búfer de vértices para instancias no está configurado correctamente con el registro de atributos de índice mínimo: si el búfer de vértices generado medianteCreateVertexBuffer() , recibe un número de índice mayor que el del búfer de vértices generado con CreateVertexBufferForInstance() .
|
Elementos de API relacionados
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Ejemplo ( Cómo utilizar este ejemplo )
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 | () | método |
public function present():void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Muestra la parte posterior del búfer de procesamiento.
Llamar a present()
) hace que los resultados de todas las operaciones de procesamiento desde la última llamada a present()
sean visibles e inicia un nuevo ciclo de procesamiento. Después de llamar a present
, debe llamar a clear()
antes de realizar otra llamada a drawTriangles()
. De lo contrario, esta función borrará el búfer de procesamiento a amarillo y verde o, si se ha definido enableErrorChecking
como true
, emitirá una excepción.
Llamar a present()
también restablece el destino de procesamiento, igual que sucede al llamar a setRenderToBackBuffer()
.
Emite
Error — Se necesita borrar para poder dibujar: si no se ha llamado al método clear() desde la anterior llamada a present() . (No está permitido realizar dos llamadas consecutivas a present() sin llamar antes a clear() .)
| |
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.
|
setBlendFactors | () | método |
public function setBlendFactors(sourceFactor:String, destinationFactor:String):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Especifica los factores utilizado para mezclar el color de salida de una operación de dibujo con el color existente.
El color de salida (origen) del programa sombreador de píxeles se combina con el color existente (destino) de ese píxel según la siguiente fórmula:
color resultante = (color de origen * sourceFactor) + (color de destino * destinationFactor)
El color de destino es el color actual en el búfer de procesamiento para dicho píxel. Así, es el resultado de la llamada más reciente a clear()
y cualquier llamada drawTriangles()
que haya intervenido.
Utilice setBlendFactors()
para definir los factores utilizados para multiplicar los colores de origen y destino antes de que se sumen. Los factores de mezcla predeterminados son, sourceFactor = Context3DBlendFactor.ONE
, y destinationFactor = Context3DBlendFactor.ZERO
, que dan como resultado la anulación del color de destino por el color de origen (en otras palabras, no se produce mezcla de los dos colores). Para mezcla alfa normal, utilice sourceFactor = Context3DBlendFactor.SOURCE_ALPHA
y destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA
.
Utilice las constantes definidas en la clase Context3DBlendFactor para definir los parámetros de esta función.
Parámetros
sourceFactor:String — El factor por el que se multiplica el color de origen. El valor predeterminado es Context3DBlendFactor.ONE .
| |
destinationFactor:String — El factor por el que se multiplica el color de destino. El valor predeterminado es Context3DBlendFactor.ZERO .
|
Emite
Error — Enumeración no válida: si sourceFactor o destinationFactor no tiene ningún valor reconocido. Estos valores se definen en la clase Context3DBlendFactor.
|
Elementos de API relacionados
Ejemplo ( Cómo utilizar este ejemplo )
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 | () | método |
public function setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Define la máscara utilizada al escribir colores en el búfer de procesamiento.
Sólo los componentes de color para los que el parámetro de máscara de color correspondiente es true
se actualizan cuando un color se escribe en el búfer de procesamiento. Por ejemplo, si se llama: setColorMask( true, false, false, false )
, tan sólo el componente rojo de un color se escribirá en el búfer hasta que vuelva a cambiar la máscara de color. La máscara de color no afecta al comportamiento del método clear()
.
Parámetros
red:Boolean — establezca false para bloquear los cambios en el canal rojo.
| |
green:Boolean — establezca false para bloquear los cambios en el canal verde.
| |
blue:Boolean — establezca false para bloquear los cambios en el canal azul.
| |
alpha:Boolean — establezca false para bloquear los cambios en el canal alfa.
|
Ejemplo ( Cómo utilizar este ejemplo )
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 | () | método |
public function setCulling(triangleFaceToCull:String):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Establece el modo "culling" de triángulo.
Los triángulos pueden ser excluidos de la escena en las primeras fases de la canalización de la representación según su orientación relativa al plano de la vista. Especifique un orden coherente de vértices (en el sentido de las agujas del reloj o en el sentido contrario a las agujas del reloj) como si mirara desde el exterior del modelo para aplicar correctamente la técnica "culling".
Parámetros
triangleFaceToCull:String — el modo "culling". Utilice una de las constantes definidas en la clase Context3DTriangleFace.
|
Emite
Error — Error de enumeración no válida: cuando triangleFaceToCull no es uno de los valores definidos en la clase Context3DTriangleFace.
|
Elementos de API relacionados
setDepthTest | () | método |
public function setDepthTest(depthMask:Boolean, passCompareMode:String):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Define el tipo de comparación utilizada para pruebas de profundidad.
La profundidad de la salida de píxeles de origen desde el programa sombreador de píxeles se compara con el valor actual en el búfer de profundidad. Si la comparación da como resultado false
, el píxel de origen se descarta. Si da como resultado true
, el píxel de origen se procesa en el siguiente paso en el flujo de procesamiento: la prueba del esténcil. Además, el búfer de profundidad se actualiza con la profundidad del píxel de origen, siempre y cuando el parámetro depthMask
se establezca en true
.
Define la prueba utilizada para comparar valores de profundidad de píxeles de origen y de destino. El píxel de origen se compone con el píxel de destino cuando la comparación es true. El operador de comparación se aplica como un operador infijo entre los valores de los píxeles de origen y de destino, en ese orden.
Parámetros
depthMask:Boolean — el valor de profundidad de destino se actualizará desde el píxel de origen si es true.
| |
passCompareMode:String — operación de prueba de comparación de profundidad. Uno de los valores de Context3DCompareMode.
|
Elementos de API relacionados
setFillMode | () | método |
public function setFillMode(fillMode:String):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 16 |
El modo definido de relleno utilizado para el procesamiento. La interfaz solo está disponible en AIR para escritorio.
Parámetros
fillMode:String — si el valor es MALLA METÁLICA, el objeto se mostrará en una malla de líneas. si el valor es SÓLIDO, el objeto se mostrará en polígonos de sombreado sólido.
|
Elementos de API relacionados
setProgram | () | método |
public function setProgram(program:Program3D):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Define programas de vértices y fragmentos para usar en posteriores procesamientos.
Parámetros
program:Program3D — el objeto Program3D que representa los programas de vértices y fragmentos para usar.
|
Elementos de API relacionados
Ejemplo ( Cómo utilizar este ejemplo )
rendercontext
, es una instancia de la clase Context3D. Los programas en el ejemplo se han escrito en Adobe Graphics Assembly Language (AGAL).
//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 | () | método |
public function setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11.1, AIR 3.1 |
Establece constantes para su uso en programas de sombreado con los valores almacenados en un ByteArray
.
Establece constantes a las que se puede acceder desde el programa de vértices o fragmentos.
Parámetros
programType:String — uno de Context3DProgramType.
| |
firstRegister:int — el índice de la primera constante de programa de sombreado para definir.
| |
numRegisters:int — número de registros para definir. Cada registro se lee como cuatro valores de coma flotante.
| |
data:ByteArray — el objeto ByteArray de origen
| |
byteArrayOffset:uint — un desplazamiento en ByteArray para leer
|
Emite
TypeError — kNullPointerError cuando data es null.
| |
RangeError — kConstantRegisterOutOfBounds cuando se intenta definir por encima del número máximo de constantes de sombreado.
| |
RangeError — kBadInputSize si byteArrayOffset es mayor o igual que la longitud de data o no. de elementos de data - byteArrayOffset es menor que numRegisters *16
|
Elementos de API relacionados
setProgramConstantsFromMatrix | () | método |
public function setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Establece constantes para su uso en programas de sombreado con los valores almacenados en una Matrix3D
.
Utilice esta función para transferir una matriz a un programa de sombreado. La función define 4 registros de constantes utilizados por el programa de vértices o fragmentos. La matriz se asigna a los registros fila por filas. El primer registro de constantes se asigna a la fila superior de la matriz. Es posible establecer 128 registros para un programa de vértices y 28 para un programa de fragmentos.
Parámetros
programType:String — El tipo de programa de sombreado, Context3DProgramType.VERTEX o Context3DProgramType.FRAGMENT .
| |
firstRegister:int — el índice del primer registro de constantes para definir. Ya que Matrix3D tiene 16 valores, cuatro registros están definidos.
| |
matrix:Matrix3D — la matriz que contiene los valores de la constante.
| |
transposedMatrix:Boolean (default = false ) — si es true , las entradas de la matriz se copian en registros en orden traspuesto. El valor predeterminado es false .
|
Emite
TypeError — Error de puntero nulo: cuando matrix es null.
| |
RangeError — Registro de constantes fuera de límites: si se intentan definir más registros que los incluidos en el número máximo de registros de constantes de sombreador.
|
Más información
Elementos de API relacionados
setProgramConstantsFromVector | () | método |
public function setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Define las entradas constantes para programas de sombreado.
Define un conjunto de constantes a las que se puede acceder mediante un programa de sombreado de vértices o fragmentos. Se puede acceder a las constantes establecidas en Program3D en los programas de sombreado como registros de constantes. Cada registro de constantes está compuesto por 4 valores de coma flotante (x, y, z, w). Por lo tanto, cada registro requiere 4 entradas en el vector de datos. El número de registros que se pueden configurar para el programa de vértices y un programa de fragmentos depende de Context3DProfile
.
Parámetros
programType:String — El tipo de programa de sombreado, Context3DProgramType.VERTEX o Context3DProgramType.FRAGMENT .
| |
firstRegister:int — el índice del primer registro de constantes para definir.
| |
data:Vector.<Number> — los valores de constantes de coma flotante. Debe haber al menos numRegisters elementos en data .
| |
numRegisters:int (default = -1 ) — el número de constantes para establecer. Especifique -1, el valor predeterminado, para establecer suficientes registros para usar todos los datos disponibles.
|
Emite
TypeError — Error de puntero nulo: cuando data es null .
| |
RangeError — Registro de constantes fuera de límites: si se intentan definir más registros que los incluidos en el número máximo de registros de constantes de sombreado.
| |
RangeError — Tamaño de entrada incorrecto: Cuando el número de elementos de data es menos quenumRegisters *4
|
Más información
Elementos de API relacionados
setRenderToBackBuffer | () | método |
public function setRenderToBackBuffer():void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Define la parte posterior del búfer de procesamiento como destino del procesamiento. Las llamadas siguientes a drawTriangles()
y clear()
tendrán como resultado actualizaciones en el búfer posterior. Utilice este método para reanudar el procesamiento normal después de utilizar el método setRenderToTexture()
.
setRenderToTexture | () | método |
public function setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Establece la textura especificada como destino de procesamiento.
Las posteriores llamadas a los métodos drawTriangles()
y clear()
actualizan la textura especificada y no la parte posterior del búfer. Los mapas mip se crean automáticamente. Utilice setRenderToBackBuffer()
para reanudar el procesamiento normal en la parte posterior del búfer.
No hay necesidad de borrar antes de dibujar. Si no hay ninguna operación de borrado, se conserva la representación del contenido. el búfer de profundidad y el de esténcil tampoco se borrarán. Pero se fuerza su borrado cuando se dibuja por primera vez. Llamar a present()
restablece el destino en la parte posterior del búfer.
Parámetros
texture:flash.display3D.textures:TextureBase — textura de destino para procesar. Establézcalo en null para reanudar el procesamiento en la parte posterior del búfer (setRenderToBackBuffer() y present también reinician el destino en la parte posterior del búfer).
| |
enableDepthAndStencil:Boolean (default = false ) — si es true , están disponibles las pruebas de intensidad y esténcil. Si es false , todos los estados de profundidad y esténcil se omiten en las posteriores operaciones dibujo.
| |
antiAlias:int (default = 0 ) — calidad del suavizado. Utilice 0 para desactivar el suavizado; los valores más altos mejoran la calidad del suavizado, pero requieren más cálculos. El valor se omite actualmente por el menú emergente de la plataforma y la representación con software.
| |
surfaceSelector:int (default = 0 ) — especifica qué elemento de la textura se va a actualizar. Los objetos Texture tienen una superficie, por lo que debe especificar 0, el valor predeterminado. Los objetos CubeTexture tienen seis superficies, por lo que puede especificar un número entero de 0 a 5.
| |
colorOutputIndex:int (default = 0 ) — El registro del color de salida. Debe ser 0 para modo restringido o de línea de base. En caso contrario, especifica el registro del color de salida.
|
Emite
ArgumentError — para un parámetro surfaceSelector no coincidente. El valor debe ser 0 para texturas 2D y 0...5 para mapas cúbicos.
| |
ArgumentError — texture no se deriva de la clase TextureBase (ni de las clases Texture o CubeTexture).
| |
ArgumentError — colorOutputIndex debe ser un número entero entre 0 y 3.
| |
ArgumentError — Esta llamada requiere un objeto Context3D creado con el perfil estándar o superior.
|
Elementos de API relacionados
setSamplerStateAt | () | método |
public function setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11.6, AIR 3.6 |
Sustituir manualmente el estado del muestreador de texturas.
El estado del muestreador de texturas se define al llamar a setProgram
. Sin embargo, es posible anular el estado del muestreador de textura con esta función. Si no desea que el programa cambie el estado del muestreador, establezca el bit ignoresamnpler
en AGAL y utilice esta función.
Parámetros
sampler:int — muestreador. El registro de muestreador para utilizar. Se asigna al registro del muestreador en AGAL.
| |
wrap:String — Modo de ajuste. Definido en Context3DWrapMode . El valor predeterminado es repetir.
| |
filter:String — Modo de filtrado de textura. Definido en Context3DTextureFilter . El valor predeterminado es el más cercano.
| |
mipfilter:String — Filtro de mapa MIP. Definido en Context3DMipFilter . El valor predeterminado es ninguno.
|
Emite
Error — muestreador fuera de rango
| |
Error — ajustar, filtro, enum filtromip incorrecta
| |
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque la representación por hardware subyacente se ha perdido.
|
Elementos de API relacionados
setScissorRectangle | () | método |
public function setScissorRectangle(rectangle:Rectangle):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Define un rectángulo tijera, similar a una máscara de dibujo. El procesador sólo dibuja al área interior del rectángulo tijera. El recorte no afecta a las operaciones de borrado.
Transfiera null
para desactivar el efecto tijera.
Parámetros
rectangle:Rectangle — El rectángulo en el que se va a dibujar. Especifique la posición y las dimensiones del rectángulo en píxeles. El origen del sistema de coordenadas es la esquina superior izquierda del visor, con los valores positivos aumentando hacia abajo y hacia la derecha (la misma que la visualización normal del sistema de coordenadas de Flash).
|
Ejemplo ( Cómo utilizar este ejemplo )
Los triángulos están definidos mediante el búfer de vértices y el búfer de índices. El búfer de vértices contiene la posición y la información de color para cada vértice del triángulo. El búfer de índices contiene índices del búfer de vértices. Un triángulo se define mediante tres índices. Por ejemplo, un triángulo formado por los tres primeros puntos en el búfer de vértices se muestra como 0,1,2 en el búfer de índices.
En este sencillo ejemplo, se lleva a cabo transformación 3D. Sólo se muestran los objetos dentro del área de visualización canónica (un volumen cúbico de 2x2x2 centrado en el origen). Sin embargo, al procesar una escena típica en 3D, se proyectan los objetos que se van a procesar en esta área de visualización mediante un perspectiva o proyección ortográfica.
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 | () | método |
public function setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Establece el modo y el funcionamiento del esténcil.
Se puede asociar un valor de referencia de esténcil de 8 bits con cada llamada de dibujo. Durante el procesamiento, el valor de referencia se puede probar con valores almacenados previamente en el búfer de fotogramas. El resultado de la prueba puede controlar la acción de dibujar y si se actualiza (y cómo ) el valor de esténcil almacenado. Además, la prueba de profundidad controla si se lleva a cabo la prueba del esténcil. Un fallo en la prueba de profundidad también puede utilizarse para controlar la acción que se realiza en el búfer del esténcil.
En el conducto del procesamiento de píxeles, la prueba de profundidad se realiza primero. Si falla la prueba de profundidad, se puede realizar una acción de actualización de búfer del esténcil, pero no se puede seguir calculando el valor del búfer del esténcil. Si se realiza correctamente la prueba de profundidad, se lleva a cabo la prueba del esténcil. Se pueden realizar acciones alternativas en función del resultado de la prueba de esténcil.
El valor de referencia del esténcil se establece utilizando setStencilReferenceValue()
.
Parámetros
triangleFace:String (default = "frontAndBack ") — las orientaciones permitidas del triángulo para contribuir a la operación del esténcil. Uno de Context3DTriangleFace.
| |
compareMode:String (default = "always ") — el operador de prueba utilizado para comparar el valor de esténcil de referencia actual y el valor de esténcil de píxeles. La actualización de la profundidad y color de píxeles del destino se realiza cuando la comparación es true. Las acciones del esténcil se realizan del modo solicitado en los siguientes parámetros de acciones. El operador de comparación se aplica como un operador infijo entre los valores de referencia actual y de destino, en ese orden (en seudocódigo: si stencilReference OPERATOR stencilBuffer entonces transferir ). Utilice una de las constantes definidas en la clase Context3DCompareMode.
| |
actionOnBothPass:String (default = "keep ") — la acción que debe tener lugar cuando se realizan correctamente las comparaciones de profundidad y de esténcil. Utilice una de las constantes definidas en la clase Context3DStencilAction.
| |
actionOnDepthFail:String (default = "keep ") — acción que debe tener lugar cuando falla la comparación de profundidad. Utilice una de las constantes definidas en la clase Context3DStencilAction.
| |
actionOnDepthPassStencilFail:String (default = "keep ") — acción que debe tener lugar cuando la comparación de profundidad se realiza correctamente y la comparación de esténcil falla. Utilice una de las constantes definidas en la clase Context3DStencilAction.
|
Emite
Error — Error de enumeración no válida: cuando triangleFace no es uno de los valores definidos en la clase Context3DTriangleFace.
| |
Error — Error de enumeración no válida: cuando compareMode no es uno de los valores definidos en la clase Context3DCompareMode.
| |
Error — Error de enumeración no válida: cuando actionOnBothPass , actionOnDepthFail o actionOnDepthPassStencilFail no es uno de los valores definidos en la clase Context3DStencilAction.
|
Elementos de API relacionados
Ejemplo ( Cómo utilizar este ejemplo )
- Borre el búfer de esténcil y póngalo a 0.
- Defina la acción esténcil para que aumente cuando pasa la prueba del esténcil.
- Establezca el valor de referencia del esténcil en 0.
- Dibuje la máscara triangular. Allá donde se dibuje el triángulo, la prueba del esténcil pasa porque el búfer del esténcil se ha borrado y se ha puesto a 0 y el valor de referencia es 0. Como resultado, el búfer del esténcil se incrementa en 1 donde se dibuja la máscara del triángulo.
- Cambie la acción del esténcil que se quiere mantener para que las operaciones posteriores de dibujo no modifiquen el búfer de esténcil.
- Dibuje un rectángulo a pantalla completa (multicolor). Debido a que el valor de referencia del esténcil todavía es 0, la prueba del esténcil falla en el área enmascarada. Por lo tanto, el rectángulo se dibuja en todas partes excepto en la región enmascarada.
- Cambie el valor de referencia del esténcil a 1.
- Dibuje otro rectángulo a pantalla completa (rojo). Ahora la prueba del esténcil fallará en todas partes excepto en el área enmascarada, que se incrementa en 1. Por lo tanto, el rectángulo sólo se dibuja en la región enmascarada.
Pase el puntero del ratón sobre el ejemplo para ver los principales pasos de la secuencia.
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 | () | método |
public function setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Define el valor de comparación del esténcil utilizado para comprobar el esténcil.
Sólo se utilizan los 8 bits más bajos del valor de referencia. El valor del búfer de esténcil también es de 8 bits de longitud. Utilice readMask
y writeMask
para usar el búfer de esténcil como un campo de bits.
Parámetros
referenceValue:uint — un valor de referencia de 8 bits utilizado en las pruebas de comparación de valores de referencia.
| |
readMask:uint (default = 255 ) — una máscara de 8 bits para aplicarla tanto al valor del búfer de esténcil actual como para el valor de referencia antes de la comparación.
| |
writeMask:uint (default = 255 ) — una máscara de 8 bits para aplicarla al valor de referencia antes de actualizar el búfer de esténcil.
|
Elementos de API relacionados
setTextureAt | () | método |
public function setTextureAt(sampler:int, texture:flash.display3D.textures:TextureBase):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Especifica la textura que se utiliza para un registro de entrada de texturas de un programa de fragmentos.
Un programa de fragmentos puede leer información de hasta ocho objetos Texture. Utilice esta función para asignar un objeto Texture o CubeTexture a uno de los registros de muestreador utilizados por el programa de fragmentos.
Nota: si cambia el programa de fragmentos activo (con setProgram
) a un sombreador que utilice menos texturas, defina los registros no utilizados como null
:
setTextureAt( 7, null );
Parámetros
sampler:int — índice del registro del muestreador; un valor de 0 a 7.
| |
texture:flash.display3D.textures:TextureBase — el objeto Texture que se pone a disposición, bien una instancia de Texture o de CubeTexture.
|
Más información
Elementos de API relacionados
CubeTexture
setVertexBufferAt | () | método |
public function setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11, AIR 3 |
Especifica qué componentes de datos de vértices corresponden a una sola entrada del programa de sombreado de vértices.
Utilice el método setVertexBufferAt()
para identificar qué componentes de los datos definidos para cada vértice de un búfer VertexBuffer3D pertenecen a cada entrada del programa de vértices. El desarrollador del programa de vértices determina la cantidad de datos necesaria por vértice. Dichos datos se asignan desde 1 o varios flujos VertexBuffer3D
en los registros de atributos del programa de sombreado de vértices.
La unidad más pequeña de datos consumidos por el sombreado de vértices es un dato de 32 bits. Los desplazamientos en el flujo de vértices se especifican en múltiplos de 32 bits.
Por ejemplo, un programador puede definir cada vértice con los siguientes datos:position: x float32 y float32 z float32 color: r unsigned byte g unsigned byte b unsigned byte a unsigned byteSuponiendo que el vértice se ha definido en un objeto VertexBuffer3D denominado
buffer
, se le asignaría un sombreado de vértices con el siguiente código:
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
Parámetros
index:int — el índice del registro de atributos en el sombreador de vértices (0 a 7).
| |
buffer:VertexBuffer3D — el búfer que contiene los datos del vértice de origen que se van a suministrar al sombreado de vértices.
| |
bufferOffset:int (default = 0 ) — un desplazamiento desde el inicio de los datos de un solo vértice en el que empezar a leer este atributo. En el ejemplo anterior, los datos de posición tienen un desplazamiento de 0 porque es el primer atributo; el color tiene un desplazamiento de 3 porque el atributo de color sigue los tres valores de posición de 32 bits. El desplazamiento se especifica en unidades de 32 bits.
| |
format:String (default = "float4 ") — un valor de la clase Context3DVertexBufferFormat que especifica el tipo de datos de este atributo.
|
Emite
Error — Enumeración no válida: si el formato no es uno de los valores definidos en la clase Context3DVertexBufferFormat.
| |
RangeError — Registro de atributos fuera de los límites: si el parámetro index está fuera del rango de 0 a 7. (Un sombreador puede utilizar un máximo de ocho registros de atributos de vértices.)
|
Más información
Elementos de API relacionados
package { import com.adobe.utils.AGALMiniAssembler; import com.adobe.utils.PerspectiveMatrix3D; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DTriangleFace; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.ErrorEvent; import flash.events.Event; import flash.geom.Matrix3D; import flash.geom.Vector3D; public class Context3DExample extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; public const zNear:Number = 1; public const zFar:Number = 500; public const fov:Number = 45; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private var projection:PerspectiveMatrix3D = new PerspectiveMatrix3D(); private var model:Matrix3D = new Matrix3D(); private var view:Matrix3D = new Matrix3D(); private var finalTransform:Matrix3D = new Matrix3D(); //For rotating the cube private const pivot:Vector3D = new Vector3D(); private const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + // 4x4 matrix transform "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3DExample() { this.stage.scaleMode = StageScaleMode.NO_SCALE; this.stage.align = StageAlign.TOP_LEFT; this.stage.nativeWindow.activate(); //AIR only stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.addEventListener( ErrorEvent.ERROR, contextCreationError ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); setupScene(); } private function setupScene():void { renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); renderContext.setCulling( Context3DTriangleFace.BACK ); //Create vertex index list for the triangles forming a cube var triangles:Vector.<uint> = Vector.<uint>( [ 2,1,0, //front face 3,2,0, 4,7,5, //bottom face 7,6,5, 8,11,9, //back face 9,11,10, 12,15,13, //top face 13,15,14, 16,19,17, //left face 17,19,18, 20,23,21, //right face 21,23,22 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes - cube faces do not share vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x,y,z r,g,b format 0,0,0, 1,0,0, //front face 0,1,0, 1,0,0, 1,1,0, 1,0,0, 1,0,0, 1,0,0, 0,0,0, 0,1,0, //bottom face 1,0,0, 0,1,0, 1,0,1, 0,1,0, 0,0,1, 0,1,0, 0,0,1, 1,0,0, //back face 1,0,1, 1,0,0, 1,1,1, 1,0,0, 0,1,1, 1,0,0, 0,1,1, 0,1,0, //top face 1,1,1, 0,1,0, 1,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,1, 0,0,1, //left face 0,1,0, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 1,1,0, 0,0,1, //right face 1,1,1, 0,0,1, 1,0,1, 0,0,1, 1,0,0, 0,0,1 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); //Set up 3D transforms projection.perspectiveFieldOfViewRH( fov, viewWidth/viewHeight, zNear, zFar ); view.appendTranslation( 0, 0, -2 ); //Move view back model.appendTranslation( -.5, -.5, -.5 ); //center cube on origin this.stage.addEventListener( Event.ENTER_FRAME, render ); } private function render( event:Event ):void { //Rotate model on each frame model.appendRotation( .5, Vector3D.Z_AXIS, pivot ); model.appendRotation( .5, Vector3D.Y_AXIS, pivot ); model.appendRotation( .5, Vector3D.X_AXIS, pivot ); //Combine transforms finalTransform.identity(); finalTransform.append( model ); finalTransform.append( view ); finalTransform.append( projection ); //Pass the final transform to the vertex shader as program constant, vc0 renderContext.setProgramConstantsFromMatrix( Context3DProgramType.VERTEX, 0, finalTransform, true ); //Clear is required before drawTriangles on each frame renderContext.clear( .3,.3,.3 ); //Draw the 12 triangles that make up the cube renderContext.drawTriangles( indexList, 0, 12 ); //Show the frame renderContext.present(); } private function contextCreationError( error:ErrorEvent ):void { trace( error.errorID + ": " + error.text ); } } }
Tue Jun 12 2018, 02:12 PM Z