Pacote | flash.display3D |
Classe | public final class Context3D |
Herança | Context3D EventDispatcher Object |
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Um contexto de renderização inclui uma superfície de desenho e os seus recursos associados e estado. Quando possível, o contexto de renderização usa a unidade de processamento de gráficos de hardware (GPU). De outra maneira, o contexto de renderização usa o software. (Se renderização por Context3D não é suportada em uma plataforma, a propridade stage3Ds
do objeto Palco contém uma lista vazia).
O contexto de renderização Context3D é um pipeline programável muito semelhante a OpenGL ES 2, mas é abstrato para que seja compatível com um intervalo de interfaces de GPU e hardware. Embora projetado para a gráficos em 3D, o pipeline de renderização não entrega a instrução cuja renderização é tridimensional. Assim, você pode criar um renderizador bidimensional fornecendo vértice apropriado e programas de fragmento de pixel. Tanto nas caixas em 3D como em caixas bidimensionais o único primitivo geométrico suportado é o triângulo.
Obtenha uma ocorrência da classe Context3D chamando o método requestContext3D ()
de um objeto Stage3D. Um número limitado de objetos Context3D pode existir por palco; um para cada Stage3D na lista Palco stage3Ds
. Quando o contexto é criado, o objeto Stage3D despacha o evento context3DCreate
. Um contexto de renderização pode ser destruído e recriado em qualquer momento, tal como quando outro aplicativo que usa o foco de ganho da GPU. O seu código deve antecipar receber múltiplos eventos context3DCreate
. Posicione a área de renderização na etapa utilizando as propriedades x
e y
da instância Stage3D associada.
Para renderizar e exibir uma cena (depois de obter um objeto Context3D), as seguintes etapas são típicas:
- Configure os principais atributos de buffer de exposição chamando
configureBackBuffer ()
. - Crie e inicialize os seus recursos de renderização, incluindo:
- Vértice e buffers de índice que definem a geometria de cena
- Vértice e programas de pixel (shaders) para renderização de cena
- Texturas
- Renderizar um quadro:
- Estabeleça o estado de renderização como apropriado para um objeto ou a coleção de objetos na cena.
- Chame o método
drawTriangles ()
para renderizar o grupo de triângulos. - Altere o estado de renderização para o próximo grupo de objetos.
- Chame
drawTriangles ()
para desenhar os triângulos que definem os objetos. - Repita até que a cena seja inteiramente renderizada.
- Chame o método
present()
para exibir a cena renderizada no palco.
Os seguintes limites aplicam-se à renderização:
Limites de recurso:
Recurso | Número permitido | Memória total |
---|---|---|
Buffers de vértice
| 4096 | 256 MB |
Buffers de índice
| 4096 | 128 MB |
Programas
| 4096 | 16 MB |
Texturas
| 4096 | 128 MB |
Texturas de cubo
| 4096 | 256 MB |
Limites de AGAL: 200 códigos de operação por programa.
Desenhar limites de chamada: 32.768 chamadas drawTriangles ()
para cada chamada present()
.
Os limites a seguir se aplicam a texturas:
Limites de textura para o AIR de 32 bits:
Textura | Tamanho máximo | Memória total de GPU |
---|---|---|
Textura normal (abaixo da linha de base estendida)
| 2048 x 2048 | 512 MB |
Textura normal (linha de base estendida e acima)
| 4096x4096 | 512 MB |
Textura retangular (abaixo da linha de base estendida)
| 2048 x 2048 | 512 MB |
Textura retangular (linha de base estendida e acima)
| 4096x4096 | 512 MB |
Textura de cubo
| 1024 x 1024 | 256 MB |
Limites de textura para o AIR de 64 bits (Desktop):
Textura | Tamanho máximo | Memória total de GPU |
---|---|---|
Textura normal (abaixo da linha de base estendida)
| 2048 x 2048 | 512 MB |
Textura normal (linha de base estendida a padrão)
| 4096x4096 | 512 MB |
Textura normal (padrão estendida e acima)
| 4096 x 4096 | 2048 MB |
Textura retangular (abaixo da linha de base estendida)
| 2048 x 2048 | 512 MB |
Textura retangular (linha de base estendida a padrão)
| 4096x4096 | 512 MB |
Textura retangular (padrão estendida e acima)
| 4096 x 4096 | 2048 MB |
Textura de cubo
| 1024 x 1024 | 256 MB |
512 MB é o limite absoluto de texturas, incluindo a memória de textura necessária para mipmaps. No entanto, para Texturas de cubo, o limite de memória é 256 MB.
Não é possível criar objetos Context3D com o construtor Context3D. É construído e disponibilizado como uma propriedade da ocorrência Stage3D. A classe Context3D pode ser usada em plataformas móveis e da área de trabalho, com o Flash Player e com o AIR.
Elementos da 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
Propriedade | Definido por | ||
---|---|---|---|
backBufferHeight : int [somente leitura]
Especifica a altura do buffer traseiro, que pode ser alterada por uma chamada bem-sucedida para o método configureBackBuffer (). | Context3D | ||
backBufferWidth : int [somente leitura]
Especifica a largura do buffer traseiro, que pode ser alterada por uma chamada bem-sucedida para o método configureBackBuffer(). | Context3D | ||
constructor : Object
Uma referência ao objeto de classe ou à função de construtor de uma determinada ocorrência de objeto. | Object | ||
driverInfo : String [somente leitura]
O tipo do driver de biblioteca de gráficos usado por este contexto de renderização. | Context3D | ||
enableErrorChecking : Boolean
Especifica se os erros encontrados pelo renderizador são informados ao aplicativo. | Context3D | ||
maxBackBufferHeight : int
Especifica a altura máxima do buffer traseiro. | Context3D | ||
maxBackBufferWidth : int
Especifica a largura máxima do buffer traseiro. | Context3D | ||
profile : String [somente leitura]
O perfil de suporte de recurso usado por este objeto Context3D. | Context3D | ||
supportsVideoTexture : Boolean [estático] [somente leitura]
Indica se Context3D é compatível com textura de vídeo. | Context3D | ||
totalGPUMemory : Number [somente leitura]
Retorna a memória total de GPU atribuída pelas estruturas de dados Stage3D de um aplicativo. Sempre que um objeto de recursos de GPU é criado, a memória utilizada é armazenada em Context3D. | Context3D |
Método | Definido por | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registra um objeto de ouvinte de evento em um objeto EventDispatcher, de forma que o ouvinte receba a notificação de um 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
Limpa a cor, profundidade e os buffers de estêncil associados a este objeto Context3D e preenchê-os com os valores especificados. | Context3D | ||
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Define as dimensões da janela de visão e outros atributos do buffer de renderização. | Context3D | ||
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Cria um objeto CubeTexture. | Context3D | ||
Cria um objeto IndexBuffer3D. | Context3D | ||
Cria um objeto Program3D. | Context3D | ||
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Cria um objeto Rectangle Texture. | Context3D | ||
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Cria um objeto Texture. | Context3D | ||
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Cria um objeto VertexBuffer3D. | Context3D | ||
createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Cria um objeto VertexBuffer3D para dados de instâncias. | Context3D | ||
Cria um objeto VideoTexture. | Context3D | ||
Envia um evento para o fluxo de eventos. | EventDispatcher | ||
Liberta todos os recursos e o armazenamento interno associou a este Context3D. | Context3D | ||
Desenha o buffer de renderização atual em um bitmap. | Context3D | ||
Renderize os triângulos especificados que usam os buffers atuais e o estado deste objeto Context3D. | Context3D | ||
drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Renderize os triângulos especificados com instâncias, que usam os buffers atuais e o estado deste objeto Context3D. | Context3D | ||
Verifica se o objeto EventDispatcher tem ouvintes registrados para um tipo específico de evento. | EventDispatcher | ||
Indica se um objeto tem uma propriedade especificada definida. | Object | ||
Indica se uma ocorrência da classe Object está na cadeia de protótipos do objeto especificado como o parâmetro. | Object | ||
Exibe o buffer traseiro de renderização. | Context3D | ||
Indica se a propriedade especificada existe e é enumerável. | Object | ||
Remove um ouvinte do objeto EventDispatcher. | EventDispatcher | ||
Especifica os fatores usados para misturar a cor de saída de uma operação de desenho com a cor existente. | Context3D | ||
Define a máscara usada gravando cores ao buffer de renderização. | Context3D | ||
Define modo de remoção de triângulo. | Context3D | ||
Define o tipo de comparação usado para teste em profundidade. | Context3D | ||
Definir o modo de preenchimento usado para a renderização. | Context3D | ||
Define programas sombreadores de fragmento e vértice para utilização em renderização subsequente. | Context3D | ||
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Configure as constantes de utilização por programas de sombreador que usam valores armazenados em ByteArray. | Context3D | ||
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Define as constantes de utilização por programas sombreadores que utilizem valores armazenados em uma Matrix3D. | Context3D | ||
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Define as entradas constantes dos programas sombreadores. | Context3D | ||
Define a disponibilidade de uma propriedade dinâmica para operações de repetição. | Object | ||
Define o buffer traseiro de renderização como o destino de renderização. | Context3D | ||
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Define a textura especificada como o destino de renderização. | Context3D | ||
Substitua manualmente o estado de amostra da textura. | Context3D | ||
Define um retângulo de tesoura, que é um tipo de máscara de desenho. | Context3D | ||
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Define o modo estêncil e operação. | Context3D | ||
Define o valor de comparação de estêncil usado em testes de estêncil. | Context3D | ||
Especifica a textura a ser utilizada para um registro de entrada de textura de um programa de fragmento. | Context3D | ||
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Especifica que componentes de dados de vértice correspondem a um vértice único de entrada de programa sombreador. | Context3D | ||
Retorna a representação da string deste objeto, formatado segundo as convenções específicas para a localidade. | Object | ||
Retorna a representação de string do objeto especificado. | Object | ||
Retorna o valor primitivo do objeto especificado. | Object | ||
Verifica se um ouvinte de evento está registrado nesse objeto EventDispatcher ou em qualquer um de seus ancestrais para o tipo de evento especificado. | EventDispatcher |
backBufferHeight | propriedade |
backBufferHeight:int
[somente leitura] Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 15, AIR 15 |
Especifica a altura do buffer traseiro, que pode ser alterada por uma chamada bem-sucedida para o método configureBackBuffer()
. A altura pode ser alterada quando o fator de zoom do navegador é alterado caso o wantsBestResolutionOnBrowserZoom
é definido para verdadeiro
na última chamada bem-sucedida para o método configureBackBuffer()
. A alteração de altura pode ser detectada registrando um ouvinte para o evento de alteração de zoom do navegador.
Implementação
public function get backBufferHeight():int
Elementos da API relacionados
backBufferWidth | propriedade |
backBufferWidth:int
[somente leitura] Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 15, AIR 15 |
Especifica a largura do buffer traseiro, que pode ser alterada por uma chamada bem-sucedida para o método configureBackBuffer ()
. A largura pode ser alterada quando o fator de zoom do navegador é alterado caso o wantsBestResolutionOnBrowserZoom
é definido para verdadeiro
na última chamada bem-sucedida para o método configureBackBuffer()
. A alteração de largura pode ser detectada registrando um ouvinte para o evento de alteração de zoom do navegador.
Implementação
public function get backBufferWidth():int
Elementos da API relacionados
driverInfo | propriedade |
driverInfo:String
[somente leitura] Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
O tipo do driver de biblioteca de gráficos usado por este contexto de renderização. Indica se a renderização está usando software, DirectX ou um driver de OpenGL. Também indica se houve falha na renderização do hardware. Se a renderização de hardware falhar, o Flash Player usará a renderização de software para o Stage3D e driverInfo
contém um dos seguintes valores:
- "Software Hw_disabled=userDisabled" - a caixa de seleção Ativar aceleração de hardware na interface de usuário de do Adobe Flash Player não está marcada.
- "Software Hw_disabled=oldDriver" - há problemas conhecidos com o driver de gráficos do hardware. Atualizar o driver de gráficos pode corrigir esse problema.
- "Software Hw_disabled=unavailable" - problemas conhecidos com o driver de gráficos do hardware ou falha na inicialização de gráficos do hardware.
- "Software Hw_disabled=explicit" - o conteúdo solicitou explicitamente a renderização de software por requestContext3D.
- "Software Hw_disabled=domainMemory" - O conteúdo usa domainMemory, que requer uma licença quando usado com renderização de hardware Stage3D. Visite adobe.com/go/fpl_br.
Implementação
public function get driverInfo():String
enableErrorChecking | propriedade |
enableErrorChecking:Boolean
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Especifica se os erros encontrados pelo renderizador são informados ao aplicativo.
Quando enableErrorChecking
é true
, os métodos clear()
, e drawTriangles()
são síncronos e podem lançar erro erros. Quando enableErrorChecking
é false
, o padrão, os métodos clear()
, e drawTriangles ()
são assíncronos e os erros não são informados. A ativação de verificação de erros reduz o desempenho de renderização. Você só deve ativar a verificação de erros na depuração.
Implementação
public function get enableErrorChecking():Boolean
public function set enableErrorChecking(value:Boolean):void
Elementos da API relacionados
maxBackBufferHeight | propriedade |
maxBackBufferHeight:int
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 15, AIR 15 |
Especifica a altura máxima do buffer traseiro. O valor inicial é o limite de sistema na plataforma. A propriedade pode ser definida como um valor menor que ou igual a, porém não maior que o limite do sistema. A propriedade pode ser definida como um valor maior que ou igual a, porém não menor que o limite do sistema. O limite mínimo é um valor de constante, 32, quando o buffer traseiro não está configurado. O limite mínimo será o valor de parâmetro de altura da última chamada bem-sucedida para o métodoconfigureBackBuffer ()
depois que o buffer traseiro é configurado.
Implementação
public function get maxBackBufferHeight():int
public function set maxBackBufferHeight(value:int):void
maxBackBufferWidth | propriedade |
maxBackBufferWidth:int
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 15, AIR 15 |
Especifica a largura máxima do buffer traseiro. O valor inicial é o limite de sistema na plataforma. A propriedade pode ser definida como um valor menor que ou igual a, porém não maior que o limite do sistema. A propriedade pode ser definida como um valor maior que ou igual a, porém não menor que o limite do sistema. O limite mínimo é um valor de constante, 32, quando o buffer traseiro não está configurado. O limite mínimo será o valor de parâmetro de largura da última chamada bem-sucedida para o métodoconfigureBackBuffer ()
depois que o buffer traseiro é configurado.
Implementação
public function get maxBackBufferWidth():int
public function set maxBackBufferWidth(value:int):void
profile | propriedade |
supportsVideoTexture | propriedade |
totalGPUMemory | propriedade |
totalGPUMemory:Number
[somente leitura] Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 21, AIR 21 |
Retorna a memória total de GPU atribuída pelas estruturas de dados Stage3D de um aplicativo.
Sempre que um objeto de recursos de GPU é criado, a memória utilizada é armazenada em Context3D. Esta memória inclui os buffers de índice, os buffers de vértice, as texturas (com exceção da textura de vídeo) e os programas que foram criados com este Context3D.
A API totalGPUMemory
retorna para o usuário o total de memória consumida pelos recursos acima. O valor padrão retornado é 0. O total de memória de GPU retornado está em bytes. As informações só são fornecidas no modo Direct em dispositivos móveis, e nos modos Direct e GPU no computador. (No computador, a utilização de <renderMode>gpu</renderMode>
redirecionará para <renderMode>direct</renderMode>
)
Implementação
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
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Limpa a cor, profundidade e os buffers de estêncil associados a este objeto Context3D e preenchê-os com os valores especificados.
Estabeleça o parâmetro mask
para especificar quais buffers limpar. Use as constantes definidas na classe Context3DClearMask para estabelecer o parâmetro mask
. Utilize o operador OR em nível de bits, "|", para adicionar múltiplos buffers à máscara (ou utilize Context3DClearMask.ALL
). Ao renderizar ao buffer traseiro, o método configureBackBuffer ()
deverá ser chamado antes de quaisquer chamadas clear()
.
Nota: Se você especificar um valor de parâmetro fora do intervalo permitido, os valores de parâmetro Numeric serão silenciosamente fixados para o intervalo de zero a um. Do mesmo modo, se stencil
for maior do que 0xff, ele será definido para 0xff.
Parâmetros
red:Number (default = 0.0 ) — o componente vermelho da cor com o qual limpar o buffer a cores, no intervalo de zero a um.
| |
green:Number (default = 0.0 ) — o componente verde da cor com o qual limpar o buffer a cores, no intervalo de zero a um.
| |
blue:Number (default = 0.0 ) — o componente azul da cor com o qual limpar o buffer a cores, no intervalo de zero a um.
| |
alpha:Number (default = 1.0 ) — o componente alfa da cor com o qual limpar o buffer a cores, no intervalo de zero a um. O componente alfa não é usado para a mesclagem. É gravado diretamente no buffer alfa.
| |
depth:Number (default = 1.0 ) — o valor com o qual limpar o buffer de profundidade, no intervalo de zero a um.
| |
stencil:uint (default = 0 ) — o valor de 8 bits com o qual limpar o buffer de estêncil, em um intervalo de 0x00 a 0xff.
| |
mask:uint (default = 0xffffffff ) — especifica quais buffers limpar.
|
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — 3768: a API do Stage3D não pode ser usada durante a execução de fundo.
|
Elementos da API relacionados
configureBackBuffer | () | método |
public function configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define as dimensões da janela de visão e outros atributos do buffer de renderização.
A renderização é duplamente armazenada em buffer. O buffer traseiro é trocado com o buffer dianteiro visível quando o método present()
é chamado. O tamanho mínimo do buffer é 32x32 pixels. O tamanho máximo do buffer traseiro é limitado pelos recursos do dispositivo e também pode ser definido pelo usuário, por meio das propriedades maxBackBufferWidth
e maxBackBufferHeight
. A configuração do buffer é uma operação lenta. Evite alterar o tamanho de buffer ou atributos durante as operações de renderização normais.
Parâmetros
width:int — largura em pixels do buffer.
| |||||||||
height:int — altura em pixels do buffer.
| |||||||||
antiAlias:int — um valor inteiro que especifica a qualidade de suavização necessária. O valor está em correlação ao número de subamostras utilizadas na suavização. A utilização de mais reduções de resolução necessita de mais cálculos para ser executada, embora o impacto de desempenho relativo dependa do hardware de renderização específico. O tipo de suavização e se ela é de fato realizada depende do dispositivo e do modo de renderização. A suavização não é suportada em absoluto pelo contexto de renderização do software.
| |||||||||
enableDepthAndStencil:Boolean (default = true ) — false não indica nenhuma profundidade ou o buffer do estêncil é criado e true cria o buffer de estêncil e uma profundidade. Para um aplicativo AIR 3.2 ou posterior compilado com a versão 15 ou superior do SWF, se o elemento renderMode no arquivo de descrição do aplicativo for direct , o elemento depthAndStencil no arquivo de descrição de aplicativo deve ter o mesmo valor que esse argumento. Por padrão, o valor do elemento depthAndStencil é false .
| |||||||||
wantsBestResolution:Boolean (default = false ) — true indica que, se o dispositivo suportar telas de HiDPI, tentará alocar um buffer traseiro maior do que o indicado com os parâmetros de altura e largura. Como essa operação adiciona mais pixels e potencialmente altera o resultado das operações do sombreador, ela é desativada por padrão. Use Stage.contentsScaleFactor para determinar quanto o buffer traseiro nativo aumentou.
| |||||||||
wantsBestResolutionOnBrowserZoom:Boolean (default = false ) — verdadeiro indica que o tamanho do buffer traseiro deve aumentar proporcionalmente para aumentar o fator de zoom do navegador. A configuração desse valor é persistente em diversos zooms de navegadores. O valor padrão da propriedade é falso . Configure as propriedades maxBackBufferWidth e maxBackBufferHeight para limitar o aumento do tamanho do buffer traseiro. Use o backBufferWidth e o backBufferHeight para determinar o tamanho atual do buffer traseiro.
|
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — Tamanho de entrada incorreto: o parâmetro de altura ou largura é menor do que o tamanho mínimo de buffer traseiro permitido, ou maior que o tamanho máximo de buffer traseiro permitido.
| |
Error — 3709: O sinalizador depthAndStencil no descritor do aplicativo deve corresponder ao booleano enableDepthAndStencil transmitido a configureBackBuffer() no objeto Context3D.
|
createCubeTexture | () | método |
public function createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Cria um objeto CubeTexture.
Utilize um objeto CubeTexture para carregar bitmaps de textura de cubo no contexto de renderização e para a referência a uma textura de cubo durante a renderização. Uma textura de cubo consiste em seis texturas quadradas igualmente ajustadas, organizadas em uma topologia cúbica e é útil para descrever mapas de ambiente.
Não é possível criar objetos CubeTexture com um construtor de CubeTexture; em vez disso, utilize este método. Após criar um objeto CubeTexture, carregue os dados de bitmap de textura utilizando os métodos uploadFromBitmapData ()
, uploadFromByteArray ()
, ou uploadCompressedTextureFromByteArray ()
do CubeTexture.
Parâmetros
size:int — O comprimento de borda de textura em texels.
| |
format:String — O formato de texel, da lista enumerada Context3DTextureFormat.
A compactação de textura permite que você armazene imagens em formato compactado diretamente na GPU, o que poupa a memória da GPU e a largura de banda da memória. Tipicamente, texturas compactadas são compactadas offline e carregadas na GPU em formato compactado usando o método Texture.uploadCompressedTextureFromByteArray. O Flash Player 11.4 e o AIR 3.4 em plataformas de desktop oferecem suporte à compactação de textura de tempo de execução, que pode ser útil em algumas situações, como a renderização de texturas dinâmicas de arte vetorial. Observe que esse recurso não está disponível atualmente em plataformas móveis e um ArgumentError (Incompatibilidade no formato de textura) será gerado em vez disso. Para usar a compactação de textura de tempo de execução, siga as seguintes etapas: 1. Crie o objeto de textura chamando o método Context3D.createCubeTexture(), fornecendo flash.display3D.Context3DTextureFormat.COMPRESSED ou flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA como o parâmetro de formato. 2. Utilizando a instância flash.display3D.textures.Texture retornada por createCubeTexture(), chame flash.display3D.textures.CubeTexture.uploadFromBitmapData() ou flash.display3D.textures.CubeTexture.uploadFromByteArray() para carregar e compactar a textura em uma etapa. | |
optimizeForRenderToTexture:Boolean — Definido como verdadeiro se a textura for ser usada como um destino de renderização.
| |
streamingLevels:int (default = 0 ) — O nível de mapa MIP que precisa ser carregado antes da renderização da imagem. O Streaming de textura oferece a capacidade de carregar e exibir os menores níveis de mip primeiro, exibindo progressivamente imagens de qualidade mais alta conforme as texturas são carregadas. Os usuários finais podem visualizar imagens de qualidade mais baixa em um aplicativo enquanto as imagens de melhor qualidade são carregadas.
Por padrão, streamingLevels é 0, o que significa que a imagem com a qualidade mais alta no mapa MIP deverá ser carregada antes da renderização da imagem. Esse parâmetro foi adicionado no Flash Player 11.3 e no AIR 3.3. Usar o valor padrão mantém o comportamento das versões anteriores do Flash Player e do AIR. Defina Nota: Definir esta propriedade com um valor > 0 pode afetar a utilização de memória e o desempenho. |
flash.display3D.textures:CubeTexture |
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — Limite de recursos excedido: se demasiados objetos de textura forem criados ou a quantidade de memória alocada para texturas for excedida.
| |
ArgumentError — Textura de profundidade não implementada: se você tentar criar uma textura de profundidade.
| |
ArgumentError — Tamanho de textura é zero: se o parâmetro size não é maior do que zero.
| |
ArgumentError — c: se o parâmetro size não é uma potência de dois.
| |
ArgumentError — Textura grande demais: se o parâmetro size é maior do que 1024.
| |
Error — Falha na criação de textura: se o objeto CubeTexture não puder ser criado pelo contexto de renderização (mas as informações sobre o motivo não são disponíveis).
| |
ArgumentError — Nível de fluxo inválido: se streamingLevels for maior ou igual a log2(size).
|
Elementos da API relacionados
createIndexBuffer | () | método |
public function createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Cria um objeto IndexBuffer3D.
Utilize um objeto de IndexBuffer3D para carregar um conjunto de índices de triângulo no contexto de renderização e para a referência àquele conjunto de índices da renderização. Cada índice no buffer de índice refere-se a um vértice correspondente em um buffer de vértice. Cada conjunto de três índices identifica um triângulo. Transmita o objeto IndexBuffer3D ao métododrawTriangles ()
para renderizar um ou vários triângulos definidos no buffer de índice.
Não é possível criar objetos de IndexBuffer3D com o construtor de classes IndexBuffer3D; em vez disso, utilize este método. Após criar um objeto IndexBuffer3D, carregue os índices utilizando os métodos IndexBuffer3D uploadFromVector ()
ou uploadFromByteArray ()
.
Parâmetros
numIndices:int — o número de vértices a ser armazenado no buffer.
| |
bufferUsage:String (default = "staticDraw ") — o uso esperado do buffer. Use uma das constantes definidas em Context3DBufferUsage . O driver de hardware pode realizar a otimização apropriada quando definido corretamente. Este parâmetro está disponível somente no Flash 12/AIR 4.
|
IndexBuffer3D |
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — Limite de recursos excedido: se demasiados buffers de índice forem criados ou a quantidade de memória alocada para buffers de índice for excedida.
| |
Error — 3768: a API do Stage3D não pode ser usada durante a execução de fundo.
| |
ArgumentError — Buffer grande demais: quandonumIndices é maior que ou igual a 0xf0000.
|
Elementos da API relacionados
createProgram | () | método |
public function createProgram():Program3D
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Cria um objeto Program3D.
Utilize um objeto Program3D para carregar programas sombreadores no contexto de renderização e para referência a programas carregados durante a renderização. Um objeto Program3D armazena dois programas, um programa de vértice e um programa de fragmento (também conhecido como um programa de pixel). Os programas são gravados em linguagem assembly shader binária.
Não é possível criar objetos Program3D com um construtor de Program3D; em vez disso, utilize este método. Após criar um objeto Program3D, carregue os programas utilizando o método upload()
do Program3D.
Program3D |
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — O número de programas excede 4096 ou o tamanho de memória total excede 16 MB (utilize dispose para libertar recursos Program3D).
|
Elementos da API relacionados
Exemplo ( Como usar este exemplo )
renderContext
, é uma ocorrência da classe Context3D. Os programas no exemplo são escritos em AGAL (Adobe Graphics Assembly Language).
//A simple vertex program in AGAL const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + "mov v0, va1"; //A simple fragment (or pixel) program in AGAL const FRAGMENT_SHADER:String = "mov oc, v0"; var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var programPair:Program3D; //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair );
createRectangleTexture | () | método |
public function createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.8, AIR 3.8 |
Cria um objeto Rectangle Texture.
Utilize um objeto Texture para carregar bitmaps de textura de cubo no contexto de renderização e para referência a uma textura de cubo durante a renderização.
Não é possível criar objetos Rectangle Texture com um construtor de Rectangle Texture. Em vez disso, utilize este método. Após criar um objeto RectangleTexture, carregue os bitmaps de textura utilizando os métodos uploadFromBitmapData()
ou uploadFromByteArray()
.
Observe que as texturas de número inteiro de 32 bits são armazenadas em um formato BGRA empacotado para corresponder ao formato BitmapData
do Flash. As texturas de ponto flutuante usam um formato RGBA convencional.
Como as texturas retângulo são diferentes das texturas 2D normais no aspecto de que a altura e a largura não precisam ser múltiplos de dois. Elas também não contêm mapas mip. Elas são mais úteis para o uso na renderização de caixas de textura. Se uma rectangle texture for usada com uma amostra que usa filtragem de mapa mip ou repete a incorporação, a chamada drawTriangles falhará. A rectangle texture também não permite fluxo. Os únicos formatos de textura suportados com texturas retângulo são BGRA, BGR_PACKED, BGRA_PACKED. Os formatos de textura compactados não são suportados com texturas Retângulo.
Parâmetros
width:int — A largura de textura em texels.
| |
height:int — A altura de textura em texels.
| |
format:String — O formato de texel, da lista enumerada Context3DTextureFormat.
| |
optimizeForRenderToTexture:Boolean — Definido como verdadeiro se a textura for ser usada como um destino de renderização.
|
flash.display3D.textures:RectangleTexture |
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — Limite de recursos excedido: se demasiados objetos de textura forem criados ou a quantidade de memória alocada para texturas for excedida.
| |
ArgumentError — Tamanho de textura é zero: se os parâmetros ou largura ou altura não são maiores do que zero.
| |
ArgumentError — Textura grande demais: se ou o parâmetro largura ou o parâmetro de altura for maior do que 2048.
| |
Error — Falha na criação de textura: se o objeto Textura não pode ser criado pelo contexto de renderização (mas as informações sobre o motivo não estão disponíveis).
| |
Error — Requer o perfil de linha de base ou superior: se a textura retangular é criada com o perfil restrito de linha de base.
|
Elementos da API relacionados
createTexture | () | método |
public function createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Cria um objeto Texture.
Utilize um objeto Texture para carregar bitmaps de textura de cubo no contexto de renderização e para referência a uma textura de cubo durante a renderização.
Não é possível criar objetos Texture com um construtor de Texture; em vez disso, utilize este método. Após criar um objeto Texture, carregue os bitmaps de textura utilizando os métodos uploadFromBitmapData ()
, uploadFromByteArray ()
, ou uploadCompressedTextureFromByteArray ()
do Texture.
Observe que as texturas de número inteiro de 32 bits são armazenadas em um formato BGRA empacotado para corresponder ao formato BitmapData
do Flash. As texturas de ponto flutuante usam um formato RGBA convencional.
Parâmetros
width:int — A largura de textura em texels.
| |
height:int — A altura de textura em texels.
| |
format:String — O formato de texel, da lista enumerada Context3DTextureFormat.
A compactação de textura permite que você armazene imagens em formato compactado diretamente na GPU, o que poupa a memória da GPU e a largura de banda da memória. Tipicamente, texturas compactadas são compactadas offline e carregadas na GPU em formato compactado usando o método Texture.uploadCompressedTextureFromByteArray. O Flash Player 11.4 e o AIR 3.4 em plataformas de desktop oferecem suporte à compactação de textura de tempo de execução, que pode ser útil em algumas situações, como a renderização de texturas dinâmicas de arte vetorial. Observe que esse recurso não está disponível atualmente em plataformas móveis e um ArgumentError (Incompatibilidade no formato de textura) será gerado em vez disso. Para usar a compactação de textura de tempo de execução, siga as seguintes etapas: 1. Crie o objeto de textura chamando o método Context3D.createTexture(), fornecendo flash.display3D.Context3DTextureFormat.COMPRESSED ou flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA como o parâmetro de formato. 2. Utilizando a instância flash.display3D.textures.Texture retornada por createTexture(), chame flash.display3D.textures.Texture.uploadFromBitmapData() ou flash.display3D.textures.Texture.uploadFromByteArray() para carregar e compactar a textura em uma etapa. | |
optimizeForRenderToTexture:Boolean — Definido como verdadeiro se a textura for ser usada como um destino de renderização.
| |
streamingLevels:int (default = 0 ) — O nível de mapa MIP que precisa ser carregado antes da renderização da imagem. O Streaming de textura oferece a capacidade de carregar e exibir os menores níveis de mip primeiro, exibindo progressivamente imagens de qualidade mais alta conforme as texturas são carregadas. Os usuários finais podem visualizar imagens de qualidade mais baixa em um aplicativo enquanto as imagens de melhor qualidade são carregadas.
Por padrão, streamingLevels é 0, o que significa que a imagem com a qualidade mais alta no mapa MIP deverá ser carregada antes da renderização da imagem. Esse parâmetro foi adicionado no Flash Player 11.3 e no AIR 3.3. Usar o valor padrão mantém o comportamento das versões anteriores do Flash Player e do AIR. Defina Nota: Definir esta propriedade com um valor > 0 pode afetar a utilização de memória e o desempenho. |
flash.display3D.textures:Texture |
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — Limite de recursos excedido: se demasiados objetos de textura forem criados ou a quantidade de memória alocada para texturas for excedida.
| |
ArgumentError — Textura de profundidade não implementada: se você tentar criar uma textura de profundidade.
| |
ArgumentError — Tamanho de textura é zero: se os parâmetros ou largura ou altura não são maiores do que zero.
| |
ArgumentError — Textura não com potência de dois: se os parâmetros ou largura ou altura não são uma potência de dois.
| |
ArgumentError — Textura grande demais: se o parâmetro width ou height for maior que 2048 para a linha de base e o perfil restrito de linha de base, ou se o parâmetro width ou height é maior do que 4096 para a linha de base do perfil estendido.
| |
Error — Falha na criação de textura: se o objeto Textura não pode ser criado pelo contexto de renderização (mas as informações sobre o motivo não estão disponíveis).
| |
ArgumentError — Nível de fluxo inválido: se streamingLevels for maior ou igual a log2(min(width,height)).
|
Elementos da API relacionados
createVertexBuffer | () | método |
public function createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Cria um objeto VertexBuffer3D.
Utilize um objeto VertexBuffer3D para carregar um conjunto de dados de vértice no contexto de renderização. Um buffer de vértice contém os dados necessários para renderizar cada ponto na geometria de cena. Os atributos de dados associados a cada vértice normalmente incluem posição, cor e coordenadas de textura e servem de entrada ao programa sombreador do vértice. Identifique os valores de dados que correspondem a uma das entradas do programa de vértice utilizando o método setVertexBufferAt ()
. Você poderá especificar até sessenta e quatro valores 32 bits para cada vértice.
Não é possível criar objetos VertexBuffer3D com um construtor VertexBuffer3D; em vez disso, utilize este método. Após criar um objeto VertexBuffer3D, carregue os dados de vértice utilizando os métodos VertexBuffer3D uploadFromVector ()
ou uploadFromByteArray ()
.
Parâmetros
numVertices:int — o número de vértices a ser armazenado no buffer. O número máximo de vértices em um buffer único é 65535.
| |
data32PerVertex:int — o número de valores de dados de 32 bits (de 4 bytes) associado a cada vértice. O número máximo de dados de elementos de 32 bits por vértice é 64 (ou 256 bytes). Observe que somente oito registros de atributo são acessíveis por um programa sombreador de vértice a qualquer momento. Utilize SetVertextBufferAt () para selecionar atributos a partir de um buffer de vértice.
| |
bufferUsage:String (default = "staticDraw ") — o uso esperado do buffer. Use uma das constantes definidas em Context3DBufferUsage . O driver de hardware pode realizar a otimização apropriada quando definido corretamente. Este parâmetro está disponível somente no Flash 12/AIR 4
|
VertexBuffer3D |
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — Limite de recursos excedido: se demasiados objetos de buffers de índice forem criados ou a quantidade de memória alocada para buffers for excedida.
| |
ArgumentError — Buffer grande demais: quando numVertices é maior do que 0x10000 ou data32PerVertex é maior do que 64.
| |
ArgumentError — Buffer tem tamanho zero: quando numVertices é zero ou data32PerVertex é zero.
| |
ArgumentError — Falha na criação de buffers: se o objeto VertexBuffer3D não pode ser criado pelo contexto de renderização (mas as informações adicionais sobre o motivo não são disponíveis).
| |
Error — 3768: a API do Stage3D não pode ser usada durante a execução de fundo.
|
Elementos da API relacionados
Exemplo ( Como usar este exemplo )
setVertexBufferAt()
para especificar que os três primeiros pontos de dados são passados para o programa de vértice como valores de ponto flutuante 3 em va0 e que os três segundos pontos de dados são passados como va1. Um programa de vértice pode ter até oito entradas, também conhecidas como registros de atributo de vértice, definidas deste modo.
const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); var vertexes:VertexBuffer3D = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va0 as the position data renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va1 as the color data
createVertexBufferForInstances | () | método |
public function createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 20.0 |
Cria um objeto VertexBuffer3D para dados de instâncias.
Utilize um objeto VertexBuffer3D para carregar um conjunto de dados de instâncias no contexto de renderização. O buffer de vértice contém os dados necessários para renderizar todas as instâncias na geometria de cena. Os buffers de vértice com dados de instância fornecem atributos que são comuns a todos os vértices de uma instância, e servem como entrada para o programa de sombreadores de vértice. Identifique os valores de dados que correspondem a uma das entradas do programa de vértice utilizando o método setVertexBufferAt()
. Você poderá especificar até sessenta e quatro valores 32 bits para cada elemento do buffer de vértice.
Não é possível criar objetos VertexBuffer3D com um construtor VertexBuffer3D; em vez disso, utilize este método. Após criar um objeto VertexBuffer3D, carregue os dados de vértice utilizando os métodos VertexBuffer3D uploadFromVector ()
ou uploadFromByteArray ()
.
Parâmetros
numVertices:int — o número de elementos a ser armazenado no buffer. O número máximo de elementos em um buffer único é 65535.
| |
data32PerVertex:int — o número de valores de dados de 32 bits (de 4 bytes) associado a cada elemento. O número máximo de dados de elementos de 32 bits por vértice é 64 (ou 256 bytes).
| |
instancesPerElement:int — o número de instâncias que usarão um elemento do buffer de vértice.
| |
bufferUsage:String (default = "staticDraw ") — o uso esperado do buffer. Use uma das constantes definidas em Context3DBufferUsage . O driver de hardware pode realizar a otimização apropriada quando definido corretamente. Este parâmetro está disponível somente no Flash 12/AIR 4
|
VertexBuffer3D |
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — Limite de recursos excedido: se demasiados objetos de buffers de índice forem criados ou a quantidade de memória alocada para buffers for excedida.
| |
ArgumentError — Buffer grande demais: quando numVertices é maior do que 0x10000 ou data32PerVertex é maior do que 64.
| |
ArgumentError — Buffer tem tamanho zero: quando numVertices é zero ou data32PerVertex é zero.
| |
ArgumentError — Falha na criação de buffers: se o objeto VertexBuffer3D não pode ser criado pelo contexto de renderização (mas as informações adicionais sobre o motivo não são disponíveis).
| |
Error — 3768: a API do Stage3D não pode ser usada durante a execução de fundo.
| |
Error — Requer o Perfil estendido padrão ou versão superior: se este método for chamado quando o perfil solicitado é menor que o perfil estendido padrão.
| |
Error — Instâncias inválidas por elemento: se o instancesPerElement não for maior do que zero.
|
Elementos da API relacionados
createVideoTexture | () | método |
public function createVideoTexture():flash.display3D.textures:VideoTexture
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 17.0, Flash Player 18.0 |
Cria um objeto VideoTexture.
Use um objeto VideoTexture para obter quadros de vídeo como textura do objeto NetStream ou Camera e para carregar os quadros de vídeo ao contexto de renderização.
O objeto VideoTexture não pode ser criado com o construtor VideoTexture. Em vez disso, use este método. Após criar um objeto VideoTexture, anexe o objeto NetStream ou Camera para obter os quadros de vídeo com os métodos VideoTexture attachNetStream()
ou attachCamera()
.
Observe que esse método retorna o valor null se o sistema não for compatível com esse recurso.
VideoTexture não contém mipmaps. Se VideoTexture for usado com uma amostra que usa filtragem de mipmap ou quebra repetida, a chamada drawTriangles falhará. VideoTexture pode ser tratado como textura de BGRA por programas sombreadores. A tentativa de criar uma instância do objeto VideoTexture falhará se Context3D for solicitado com o modo de renderização de software.
Um máximo de 4 objetos de VideoTexture está disponível por ocorrência Context3D. Em dispositivos móveis, o número real de objetos VideoTexture suportados pode ser menor que 4 devido a limitações da plataforma.
Retornaflash.display3D.textures:VideoTexture |
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — Limite de recursos excedido: se demasiados objetos de textura forem criados ou a quantidade de memória alocada para texturas for excedida.
| |
Error — Falha na criação de textura: se o objeto Textura não pode ser criado pelo contexto de renderização (mas as informações sobre o motivo não estão disponíveis).
|
dispose | () | método |
public function dispose(recreate:Boolean = true):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Liberta todos os recursos e o armazenamento interno associou a este Context3D.
Todos os buffers de índice, os buffers de vértice, as texturas e os programas que foram criados por este Context3D são descartados exatamente como se a chamada dispose()
fosse feita em cada um deles individualmente. Além disso, o próprio Context3D é descartado, liberando todos os buffers temporários e o buffer traseiro. Se você realizar uma chamada de configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer() ou drawToBitmapData() após chamar dispose(), o tempo de execução lança uma exceção.
Aviso: chamar dispose() em um Context3D enquanto há ainda um ouvinte do evento Events.CONTEXT3D_CREATEno especificado no objeto Stage3D associado, a chamada dispose() simulará uma perda de dispositivo. Ele criará um novo Context3D no Stage3D e emitirá o evento Events.CONTEXT3D_CREATE novamente. Se não for desejável, remova o ouvinte de evento do objeto Stage3D antes de chamar dispose() ou defina o parâmetro recreate como false.
Parâmetros
recreate:Boolean (default = true )
|
Elementos da API relacionados
flash.display.Stage3D
drawToBitmapData | () | método |
public function drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 3 |
Desenha o buffer de renderização atual em um bitmap.
Os conteúdos atuais do buffer de renderização traseiro são copiados para um objeto BitmapData. Isto é uma operação potencialmente muito lenta que pode levar até um segundo. Utilize com cuidado. Observe que essa função não copia o buffer de renderização dianteiro (o mostrado na etapa), mas aquele que é desenhado. Para capturar a imagem renderizada como aparece na etapa, realize a chamada de drawToBitmapData ()
imediatamente antes de chamar present()
.
Com o AIR 25, incluímos dois novos parâmetros ao drawToBitmapData()
. Agora, essa API conta com três parâmetros. O primeiro é o parâmetro destination:BitmapData
, que já existia. O segundo parâmetro é o srcRect:Rectangle
, o retângulo de destino no stage3D. O terceiro parâmetro é o destPoint:Point
, a coordenada do bitmap de destino. Os parâmetros srcRect e destPoint são opcionais, além de atuarem como o padrão para (0,0,bitmapWidth,bitmapHeight) e (0,0), respectivamente.
Quando a imagem é desenhada, ela não é ajustada às dimensões do bitmap. Em vez disso, os conteúdos serão cortados para o tamanho do bitmap de destino.
Objetos BitmapData do Flash armazenam cores já multiplicadas pelo componente de alfa. Por exemplo, se os componentes de cor rgb "puros" de um pixel forem (0x0A, 0x12, 0xBB) e o componente de alfa for 0x7F (.5), então o pixel será armazenado no objeto BitmapData com os valores rgba: (0x05, 0x09, 0x5D, 0x7F). Você poderá definir os fatores de mistura para que as cores renderizadas ao buffer sejam multiplicadas por alfa ou executem a operação no fragmento sombreador. O contexto de renderização não valida que as cores serão armazenadas no formato pré-multiplicado.
Parâmetros
destination:BitmapData | |
srcRect:Rectangle (default = null )
| |
destPoint:Point (default = null )
|
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — 3768: a API do Stage3D não pode ser usada durante a execução de fundo.
| |
Error — 3802: se um dos parâmetros destPoint:Point ou srcRect:Rectangle extrapolar os limites de coordenadas do bitmap/stage3D, ou se um dos valores não-numéricos (NaN) for validado como input.
|
Exemplo ( Como usar este exemplo )
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
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Renderize os triângulos especificados que usam os buffers atuais e o estado deste objeto Context3D.
Para cada triângulo, os vértices de triângulo são processados pelo programa de sombreador de vértice a superfície de triângulo é processada pelo programa de sombreador pixel. A cor de saída do programa de pixel de cada pixel é desenhada no destino de renderização dependendo das operações de estêncil, teste de profundidade, origem e alfa de destino, e o modo de mesclagem atual. O destino de renderização pode ser o buffer de renderização principal ou uma textura.
Se a remoção for ativada, (com o método setCulling ()
), então os triângulos poderão ser descartados da cena antes que o programa de pixel seja executado. Se o estêncil e a prova de profundidade forem ativados, então os pixéis de saída do programa de pixel podem ser descartados sem atualizar o destino de renderização. Além disso, o programa de pixel pode decidir não fornecer saída para uma cor de um pixel.
Os triângulos renderizados não serão exibidos na janela de visão até que seja feita a chamada do método present()
. Após cada chamadapresent()
, o métodoclear()
deverá ser chamado antes que haja uma falha na primeira chamada drawTriangles ()
ou na renderização.
Quando enableErrorChecking
for false
, esta função retornará imediatamente, não esperará por resultados e lançará exceções somente se essa instância Context3D tiver sido descartada ou houver muitas chamadas de desenho. Se o estado de contexto de renderização for inválido, a renderização falhará silenciosamente. Quando a propriedade enableErrorChecking
for true
, esta função retornará após os triângulos terem sido desenhados e lançará exceções para qualquer erro de desenho ou estado de contexto inválido.
Parâmetros
indexBuffer:IndexBuffer3D — grupo de índices de vértice que tem referência aos vértices para renderização.
| |
firstIndex:int (default = 0 ) — o índice do primeiro índice de vértice selecionado para renderização. Padrão 0.
| |
numTriangles:int (default = -1 ) — o número de triângulos para renderização. Cada triângulo consome três índices. Envie -1 para desenhar todos os triângulos no buffer de índice. Padrão -1.
|
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — Se este método é chamado demasiadas vezes entre chamadas para present() . O número máximo de chamadas é 32.768.
Os seguintes erros são lançados somente quando a propriedade | |
Error — Necessário Limpar Antes de Desenhar: Se o buffer não foi limpo desde a última chamada present() .
| |
Error — Se um objeto Program3D válido não for definido.
| |
Error — Conjunto de Buffer de Índice Inválido: Se um objeto IndexBuffer3D não for definido.
| |
Error — Falha na Verificação de Sanidade nos Parâmetros: quando o número de triângulos a ser desenhado ou o firstIndex excede os valores permitidos.
| |
RangeError — Índices Não Suficientes Nesse Buffer: quando não há índices suficientes no buffer para definir o número de triângulos a ser desenhado.
| |
Error — Amostra Vincula Textura Também Vinculada à Renderização: quando o destino de renderização é uma textura e essa textura atribuída a uma entrada de textura do programa de fragmento atual.
| |
Error — Amostra Vincula Textura Inválida: uma textura inválida é especificada como a entrada ao programa de fragmento atual.
| |
Error — Classificador de Formato Não Corresponde ao Formato de Textura: quando a textura atribuída como a entrada ao programa de fragmento atual possui um formato diferente do que o especificado para o registro do classificador. Por exemplo, uma textura 2D é atribuída a um classificador de textura de cubo.
| |
Error — Amostra Vincula Textura Indefinida: O programa de fragmento atual acessa um registro de textura que não foi definido (utilizando setTextureAt () ).
| |
Error — A Mesma Textura Requer os Mesmos Parâmetros do Classificador: Se uma textura for utilizada para mais de um registro de classificador, todos os classificadores deverão ter as mesmas configurações. Por exemplo, não é possível definir um classificador para segurar e outro para quebrar.
| |
Error — Textura Vinculada Mas Não Utilizada: Uma textura é definida como uma entrada de sombreador, mas não é utilizada.
| |
Error — Fluxo Não é Utilizado: Um buffer de vértice é atribuído a uma entrada de atributo de vértice, mas o programa de vértice não faz referência ao registro correspondente.
| |
Error — Fluxo é Inválido: um objeto VertexBuffer3D atribuído a uma entrada de programa de vértice não é um objeto válido.
| |
RangeError — Fluxo Não Possui Vértices Suficientes: Um buffer de vértice que fornece dados para desenhar os triângulos especificados não possui dados suficientes.
| |
RangeError — Deslocamento de Vértice de Fluxo Fora dos Limites: O deslocamento especificado em uma chamada setVertexBufferAt () é negativa ou está além do fim do buffer.
| |
Error — Fluxo Lido Mas Não Definido: Um atributo de vértice utilizado pelo programa de vértice atual não é definido (utilizando setVertexBufferAt () ).
|
Elementos da API relacionados
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Exemplo ( Como usar este exemplo )
Os triângulos são definidos usando o buffer de vértice e o buffer de índice. O buffer de vértice contém a posição e informações a cores de cada vértice de triângulo. O buffer de índice contém índices no buffer de vértice. Três índices definem um triângulo. Por exemplo, um triângulo que consiste em três primeiros pontos no buffer de vértice é enumerado como 0,1,2 no buffer de índice.
Neste exemplo simples, nenhuma transformação 3D é executada. Só os objetos dentro da área de visualização canônica (um volume de unidade 2x2x1) podem ser exibidos e as coordenadas dos triângulos são definidas dentro desta área. Contudo, quando a renderização uma cena 3D típica, você projeta os objetos a ser renderizados do sistema de coordenação deste "mundo" nesta área de visualização usando uma perspectiva ou projeção ortográfica.
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
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 20.0 |
Renderize os triângulos especificados com instâncias, que usam os buffers atuais e o estado deste objeto Context3D.
Para cada triângulo de cada instância, os vértices de triângulo são processados pelo programa de sombreador de vértice e a superfície de triângulo é processada pelo programa de sombreador de pixel. A cor de saída do programa de pixel de cada pixel é desenhada no destino de renderização dependendo das operações de estêncil, teste de profundidade, origem e alfa de destino, e o modo de mesclagem atual. O destino de renderização pode ser o buffer de renderização principal ou uma textura.
Se a remoção for ativada, (com o método setCulling ()
), então os triângulos poderão ser descartados da cena antes que o programa de pixel seja executado. Se o estêncil e a prova de profundidade forem ativados, então os pixéis de saída do programa de pixel podem ser descartados sem atualizar o destino de renderização. Além disso, o programa de pixel pode decidir não fornecer saída para uma cor de um pixel.
Os triângulos renderizados especificados com instâncias não serão exibidos na janela de visão até que seja feita a chamada do método present()
. Após cada chamadapresent()
, o métodoclear()
deverá ser chamado antes que haja uma falha na primeira chamada drawTrianglesInstanced()
ou na renderização.
Quando enableErrorChecking
for false
, esta função retornará imediatamente, não esperará por resultados e lançará exceções somente se essa instância Context3D tiver sido descartada ou houver muitas chamadas de desenho. Se o estado de contexto de renderização for inválido, a renderização falhará silenciosamente. Quando a propriedade enableErrorChecking
for true
, esta função retornará após os triângulos terem sido desenhados e lançará exceções para qualquer erro de desenho ou estado de contexto inválido.
Este método pode gerar uma exceção caso o buffer instanciado seja sequenciado com SetVertexAt()
. Por exemplo, com o Direct 3D 9, os dados de geometria indexados e o número de instâncias projetadas devem ser configurados no fluxo zero com a API SetStreamSourceFreq()
.
Isso significa que o buffer de vértice criado com CreateVertexBufferForInstance()
não deve ser colocado com o número de índice mínimo quando for organizado com SetVertexBufferAt()
para atuarem como a entrada ao programa sombreador do vértice. O buffer de vértice gerado com o CreateVertexBuffer()
deve ser adicionado a um número de índice menor do que aquele usado em CreateVertexBufferForInstance
. Em geral, os dados de geometria devem ser colocados antes dos dados de ocorrências, comSetVertexBufferAt()
.
Parâmetros
indexBuffer:IndexBuffer3D — grupo de índices de vértice que tem referência aos vértices para renderização.
| |
numInstances:int — número de instâncias para renderização.
| |
firstIndex:int (default = 0 ) — o índice do primeiro índice de vértice selecionado para renderização. Padrão 0.
| |
numTriangles:int (default = -1 ) — o número de triângulos para renderização. Cada triângulo consome três índices. Envie -1 para desenhar todos os triângulos no buffer de índice. Padrão -1.
|
Lança
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
| |
Error — Se este método é chamado demasiadas vezes entre chamadas para present() . O número máximo de chamadas é 32.768.
| |
Error — Requer o Perfil estendido padrão ou versão superior: se este método for chamado quando o perfil solicitado é menor que o perfil estendido padrão.
| |
Error — Se este método for chamado com numInstances negativos.
Os seguintes erros são lançados somente quando a propriedade | |
Error — Necessário Limpar Antes de Desenhar: Se o buffer não foi limpo desde a última chamada present() .
| |
Error — Se um objeto Program3D válido não for definido.
| |
Error — Conjunto de Buffer de Índice Inválido: Se um objeto IndexBuffer3D não for definido.
| |
Error — Falha na Verificação de Sanidade nos Parâmetros: quando o número de triângulos a ser desenhado ou o firstIndex excede os valores permitidos.
| |
RangeError — Índices Não Suficientes Nesse Buffer: quando não há índices suficientes no buffer para definir o número de triângulos a ser desenhado.
| |
Error — Amostra Vincula Textura Também Vinculada à Renderização: quando o destino de renderização é uma textura e essa textura atribuída a uma entrada de textura do programa de fragmento atual.
| |
Error — Amostra Vincula Textura Inválida: uma textura inválida é especificada como a entrada ao programa de fragmento atual.
| |
Error — Classificador de Formato Não Corresponde ao Formato de Textura: quando a textura atribuída como a entrada ao programa de fragmento atual possui um formato diferente do que o especificado para o registro do classificador. Por exemplo, uma textura 2D é atribuída a um classificador de textura de cubo.
| |
Error — Amostra Vincula Textura Indefinida: O programa de fragmento atual acessa um registro de textura que não foi definido (utilizando setTextureAt () ).
| |
Error — A Mesma Textura Requer os Mesmos Parâmetros do Classificador: Se uma textura for utilizada para mais de um registro de classificador, todos os classificadores deverão ter as mesmas configurações. Por exemplo, não é possível definir um classificador para segurar e outro para quebrar.
| |
Error — Textura Vinculada Mas Não Utilizada: Uma textura é definida como uma entrada de sombreador, mas não é utilizada.
| |
Error — Fluxo Não é Utilizado: Um buffer de vértice é atribuído a uma entrada de atributo de vértice, mas o programa de vértice não faz referência ao registro correspondente.
| |
Error — Fluxo é Inválido: um objeto VertexBuffer3D atribuído a uma entrada de programa de vértice não é um objeto válido.
| |
RangeError — Fluxo Não Possui Vértices Suficientes: Um buffer de vértice que fornece dados para desenhar os triângulos especificados não possui dados suficientes.
| |
RangeError — Deslocamento de Vértice de Fluxo Fora dos Limites: O deslocamento especificado em uma chamada setVertexBufferAt () é negativa ou está além do fim do buffer.
| |
Error — Fluxo Lido Mas Não Definido: Um atributo de vértice utilizado pelo programa de vértice atual não é definido (utilizando setVertexBufferAt () ).
| |
Error — O fluxo do buffer de vértice não contém um número suficiente de elementos para instâncias: Se um fluxo do buffer de vértice não contém um número suficiente de elementos para uma quantidade determinada de instâncias.
| |
Error — O fluxo do buffer de vértice para instâncias foi configurado incorretamente com o índice mínimo de registros do atributo: caso o buffer de vértice gerado com o CreateVertexBuffer() receba um número de índice maior do que o buffer de vértice que foi gerado com o CreateVertexBufferForInstance() .
|
Elementos da API relacionados
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Exemplo ( Como usar este exemplo )
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
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Exibe o buffer traseiro de renderização.
Chamar o método present()
torna visíveis os resultados de todas as operações de renderização desde a última chamada present()
e inicia um novo ciclo de renderização. Após realizar a chamada de present
, será necessário chamarclear()
antes de realizar outra chamada drawTriangles()
. Caso contrário, esta função limpará alternadamente o buffer de renderização para amarelo e verde ou se enableErrorChecking
tenha sido definido para true
, uma exceção será lançada.
Chamar present()
também redefine o destino da renderização, assim como chamar setRenderToBackBuffer()
.
Lança
Error — Necessário Limpar Antes de Desenhar: Seclear() não tenha sido chamado desde a chamada anterior para present() . (Duas chamadas consecutivas present() não são permitidas antes da chamada clear() entre elas.)
| |
Error — 3768: a API do Stage3D não pode ser usada durante a execução de fundo.
|
setBlendFactors | () | método |
public function setBlendFactors(sourceFactor:String, destinationFactor:String):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Especifica os fatores usados para misturar a cor de saída de uma operação de desenho com a cor existente.
A cor de saída (origem) programa sombreador de pixel combina-se com o existente (destino) cor naquele pixel segundo a seguinte fórmula:
cor resultante = (cor de origem * sourceFactor) + (cor de destino * destinationFactor)
A cor de destino é a cor atual no buffer de renderização daquele pixel. Assim, esse é o resultado da chamada mais recente clear()
e de quaisquer chamadas sobrepostas de drawTriangles()
.
Use setBlendFactors ()
para definir os fatores usados para multiplicar as cores de origem e de destino antes que sejam misturadas. Os fatores de mistura padrão são, sourceFactor = Context3DBlendFactor. UM
, e destinationFactor = Context3DBlendFactor.ZERO
, que faz com que a cor de origem substitua a cor de destino (em outras palavras, não ocorre nenhuma mistura das duas cores ocorre). Para a mistura alfa normal, use sourceFactor = Context3DBlendFactor. SOURCE_ALPHA
e destinationFactor = Context3DBlendFactor. ONE_MINUS_SOURCE_ALPHA
.
Utilize as constantes definidas na classe Context3DBlendFactor para definir os parâmetros desta função.
Parâmetros
sourceFactor:String — O fator de multiplicação da cor de origem. Assume o padrão Context3DBlendFactor. UM .
| |
destinationFactor:String — O fator de multiplicação da cor de destino. Assume o padrão Context3DBlendFactor. ZERO .
|
Lança
Error — Enumeração Inválida: quando sourceFactor ou destinationFactor não for um dos valores reconhecidos, que são definidos na classe Context3DBlendFactor.
|
Elementos da API relacionados
Exemplo ( Como usar este exemplo )
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
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define a máscara usada ao gravar cores no buffer de renderização.
Só os componentes de cor cujos parâmetros de máscara de cor correspondentes sejatrue
são atualizados quando uma cor é gravada no buffer de renderização. Por exemplo, se você chamar: setColorMask (true, false, false, false)
, só o componente vermelho de uma cor será gravado no buffer até que você altere a máscara de cores novamente. A máscara de cores não afeta o comportamento do método clear ()
.
Parâmetros
red:Boolean — defina false para bloquear alterações no canal vermelho.
| |
green:Boolean — defina false para bloquear alterações no canal verde.
| |
blue:Boolean — defina false para bloquear alterações no canal azul.
| |
alpha:Boolean — defina false para bloquear alterações no canal alfa.
|
Exemplo ( Como usar este exemplo )
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
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define modo de remoção de triângulo.
Os triângulos podem ser excluídos no início da cena no pipeline de renderização com base na sua orientação em relação ao plano de visão. Especifique a ordem de vértice constantemente (no sentido horário ou anti-horário) como visto do exterior do modelo para a remoção ocorrer corretamente.
Parâmetros
triangleFaceToCull:String — modo de remoção. Utilize uma das constantes definidas na classe Context3DTriangleFace.
|
Lança
Error — Erro de enumeração inválido: quando triangleFaceToCull não é um dos valores definidos na classe Context3DTriangleFace.
|
Elementos da API relacionados
setDepthTest | () | método |
public function setDepthTest(depthMask:Boolean, passCompareMode:String):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define o tipo de comparação usado no teste de profundidade.
A profundidade da saída de pixel de origem do programa sombreador de pixel é comparada ao valor atual no buffer de profundidade. Se a comparação resultar no valor false
, então o pixel de origem será descartado. Se true
, então o pixel de origem será processado pela próxima etapa no pipeline de renderização, o teste de estêncil. Além disso, o buffer de profundidade é atualizado com a profundidade do pixel de origem, enquanto o parâmetro depthMask
é definido como true
.
Estabelece o teste usado para comparar valores de profundidade de pixels de destino e origem. O pixel de origem é composto com o pixel de destino quando a comparação é true. O operador de comparação é aplicado como um operador de infix entre os valores de pixel de origem e destino, nessa ordem.
Parâmetros
depthMask:Boolean — o valor de profundidade de destino será atualizado a partir do pixel de origem quando true.
| |
passCompareMode:String — a comparação de profundidade testa a operação. Um dos valores de Context3DCompareMode.
|
Elementos da API relacionados
setFillMode | () | método |
public function setFillMode(fillMode:String):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 16 |
Definir o modo de preenchimento usado para a renderização. A interface só está disponível no AIR da área de trabalho.
Parâmetros
fillMode:String — se o valor for WIREFRAME, o objeto será mostrado em uma malha de linhas. se o valor for SOLID, o objeto será mostrado em polígonos sombreados sólidos.
|
Elementos da API relacionados
setProgram | () | método |
public function setProgram(program:Program3D):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define programas sombreadores de fragmento e vértice para utilização em renderização subsequente.
Parâmetros
program:Program3D — o objeto Program3D que representa o vértice e programas de fragmento para utilização.
|
Elementos da API relacionados
Exemplo ( Como usar este exemplo )
renderContext
, é uma ocorrência da classe Context3D. Os programas estão escritos em AGAL (Adobe Graphics Assembly Language).
//A simple vertex program in AGAL const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + "mov v0, va1"; //A simple fragment (or pixel) program in AGAL const FRAGMENT_SHADER:String = "mov oc, v0"; var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var programPair:Program3D; //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair );
setProgramConstantsFromByteArray | () | método |
public function setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.1, AIR 3.1 |
Configure as constantes para utilizar programas de sombreador que usam valores armazenados em ByteArray
.
Configura constantes que podem ser acessadas a partir do programa de fragmento ou do vértice.
Parâmetros
programType:String — um de Context3DProgramType.
| |
firstRegister:int — o índice do primeiro da primeira constante do programa de sombreador a ser configurado.
| |
numRegisters:int — o número de registros a definir. Cada registro é lido como quatro valores flutuantes.
| |
data:ByteArray — a origem do objeto ByteArray
| |
byteArrayOffset:uint — um deslocamento em ByteArray para leitura
|
Lança
TypeError — kNullPointerError quando data é nulo.
| |
RangeError — kConstantRegisterOutOfBounds ao tentar configurar além do número máximo de constantes de sombreador.
| |
RangeError — kBadInputSize se byteArrayOffset é maior que ou igual ao comprimento de data ou não. dos elementos em data - byteArrayOffset é menor que numRegisters *16
|
Elementos da API relacionados
setProgramConstantsFromMatrix | () | método |
public function setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define as constantes de utilização por programas sombreadores que utilizem valores armazenados em uma Matrix3D
.
Utilize esta função para transmitir uma matriz a um programa sombreador. A função define 4 registros constantes utilizados pelo vértice ou programa de fragmento. A matriz é atribuída aos registros linha por linha. O primeiro registro constante é atribuído a linha superior da matriz. É possível definir 128 registros de um programa de vértice e 28 para um programa de fragmento.
Parâmetros
programType:String — O tipo de programa sombreador, Context3DProgramType.VERTEX ou Context3DProgramType.FRAGMENT .
| |
firstRegister:int — o índice do primeiro registro constante a ser definido. Já que um Matrix3D tem 16 valores, quatro registros serão definidos.
| |
matrix:Matrix3D — a matriz que contém os valores constantes.
| |
transposedMatrix:Boolean (default = false ) — se true as entradas matrizes serão copiadas para registros na ordem transposta. O valor padrão é false .
|
Lança
TypeError — Erro de Ponteiro Nulo: quando matrix for nula.
| |
RangeError — Registro Constante Fora dos Limites: ao tentar definir mais do que o número máximo de registros constantes de sombreador.
|
Saiba mais
Elementos da API relacionados
setProgramConstantsFromVector | () | método |
public function setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define as entradas constantes dos programas sombreadores.
Configure uma matriz de constantes que pode ser acessada por um vértice ou programa shader de fragmento. Constantes configuradas em Program3Ds são acessadas dentro dos programas shader como registros constantes. Cada registro constante consiste em 4 valores de ponto flutuante (x, y, z, w). Por isso, cada registro necessita de 4 entradas no Vetor de dados. O número de registros que você pode definir para o programa vertex e o programa de fragmentos depende doContext3DProfile
.
Parâmetros
programType:String — O tipo de programa sombreador, Context3DProgramType.VERTEX ou Context3DProgramType.FRAGMENT .
| |
firstRegister:int — o índice do primeiro registro constante a ser definido.
| |
data:Vector.<Number> — valores constantes de ponto flutuante. Deve haver pelo menos numRegisters 4 elementos em data .
| |
numRegisters:int (default = -1 ) — o número de constantes a ser configurado. Especifique -1, o valor padrão, para definir registros suficientes para utilização de todos os dados disponíveis.
|
Lança
TypeError — Erro de Ponteiro Nulo: quando data é null .
| |
RangeError — Registro Constante Fora dos Limites: ao tentar definir mais do que o número máximo de registros constantes de sombreador.
| |
RangeError — Tamanho de entrada incorreto: quando o número de elementos em data for menor que numRegisters *4
|
Saiba mais
Elementos da API relacionados
setRenderToBackBuffer | () | método |
public function setRenderToBackBuffer():void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define o buffer traseiro de renderização como o destino de renderização. Chamadas subsequentes para os métodos drawTriangles()
e clear()
resultarão em atualizações ao buffer traseiro. Utilize este método para retomar a renderização normal após a utilização do 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
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define a textura especificada como o destino de renderização.
As chamadas subsequentes para os métodos drawTriangles ()
e clear ()
atualizam a textura especificada em vez do buffer traseiro. Os mapas mip são criados automaticamente. Utilize setRenderToBackBuffer ()
para retomar a renderização normal ao buffer traseiro.
Não é necessário limpar antes de desenhar. Caso não haja nenhuma operação limpa, o conteúdo da renderização será mantido. o buffer de profundidade e o buffer de estêncil também não serão limpos. Porém precisam ser limpos quando o primeiro desenho for feito. Chamar present()
redefine o destino ao buffer traseiro.
Parâmetros
texture:flash.display3D.textures:TextureBase — a textura de destino para renderização. Definido como null para retomar renderização ao buffer traseiro (setRenderToBackBuffer () e present também redefinem o destino ao buffer traseiro).
| |
enableDepthAndStencil:Boolean (default = false ) — se true , a profundidade e a prova de estêncil estarão disponíveis. Se false , todo o estado de estêncil e profundidade será ignorado em operações de desenho subsequentes.
| |
antiAlias:int (default = 0 ) — a qualidade de suavização. Utilize 0 para desativar a suavização; os valores mais altos melhoram a qualidade de suavização, mas requerem mais cálculos. No momento, o valor está sendo ignorado pelo contexto de renderização da plataforma móvel e do software.
| |
surfaceSelector:int (default = 0 ) — especifica que elemento de textura deverá ser atualizado. Os objetos de textura possuem uma superfície, portanto você deverá especificar 0, o valor padrão. Os objetos CubeTexture possuem seis superfícies, portanto você poderá especificar um número inteiro de 0 a 5.
| |
colorOutputIndex:int (default = 0 ) — O registro de cores de saída. Deve ser 0 para o modo de linha de base ou restringido. Especifica o registro de cores de saída.
|
Lança
ArgumentError — para um parâmetro surfaceSelector mal combinado. O valor deve ser 0 para texturas de 2D e 0 a 5 para mapas de cubo.
| |
ArgumentError — texture não deriva da classe TextureBase (classes Texture ou CubeTexture).
| |
ArgumentError — colorOutputIndex deve ser um número inteiro de 0 a 3.
| |
ArgumentError — esta solicitação requer um Context3D criado com perfil padrão ou superior.
|
Elementos da API relacionados
setSamplerStateAt | () | método |
public function setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.6, AIR 3.6 |
Substitua manualmente o estado da amostragem da textura..
O estado de amostragem da textura normalmente é definido no momento em que o setProgram
é chamado. Contudo, você pode substituir o estado da amostra de textura com essa função. Se não desejar que o programa para altere o estado da amostragem, defina o bit ignoresamnpler
em AGAL e use esta função.
Parâmetros
sampler:int — O registro de amostra a ser utilizado. Mapas para o registro de amostras em AGAL.
| |
wrap:String — Modo de quebra. Definido no Context3DWrapMode . O padrão é "repeat".
| |
filter:String — Modo de filtração de textura. Definido no Context3DTextureFilter . O padrão é "nearest".
| |
mipfilter:String — Filtro de mapa MIP. Definido no Context3DMipFilter . O valor padrão é "none".
|
Lança
Error — mostruário fora do intervalo
| |
Error — quebra, filtro, mipfilter bad enum
| |
Error — Objeto Descartado: se este objeto Context3D foi descartado por uma chamada dispose() ou porque o hardware de renderização subjacente foi perdido.
|
Elementos da API relacionados
setScissorRectangle | () | método |
public function setScissorRectangle(rectangle:Rectangle):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define um retângulo de tesoura, que é um tipo de máscara de desenho. O renderizador desenha somente para a área dentro do retângulo de corte. O tesouramento não afeta operações de limpeza.
Transmita null
para desativar o corte.
Parâmetros
rectangle:Rectangle — O retângulo no qual deverá ser desenhado. Especifique a posição de retângulo e as dimensões em pixels. A origem de sistema de coordenadas é o canto esquerdo superior da janela de visão, com valores positivos que aumentam para baixo e à direita (o mesmo como o sistema normal de coordenadas de exibição do Flash).
|
Exemplo ( Como usar este exemplo )
Os triângulos são definidos usando o buffer de vértice e o buffer de índice. O buffer de vértice contém a posição e informações a cores de cada vértice de triângulo. O buffer de índice contém índices no buffer de vértice. Três índices definem um triângulo. Por exemplo, um triângulo que consiste em três primeiros pontos no buffer de vértice é enumerado como 0,1,2 no buffer de índice.
Neste exemplo simples, nenhuma transformação 3D é executada. Só os objetos dentro da área de visualização canônica (um volume de cubo de 2x2x2 centrado na origem) são exibidos. Contudo, quando a renderização uma cena 3D típica, você projeta os objetos a ser renderizados nesta área de visualização usando uma perspectiva ou projeção 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
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define o modo estêncil e operação.
Um valor de referência de estêncil de 8 bits pode ser associado com cada chamada de desenho. Durante a renderização, o valor de referência pode ser testado contra valores armazenados anteriormente no buffer de quadro. O resultado do teste pode controlar a ação do desenho e se ou como o valor de estêncil armazenado é atualizado. Além disso, a prova de profundidade controla se a prova de estêncil é executada. Um teste de profundidade que falhou também pode ser usado para controlar a ação executada no buffer do estêncil.
No pipeline de processamento de pixel, a prova de profundidade é executada primeiro. Se o teste de profundidade falhar, uma ação de atualização de buffer de estêncil pode ser executada, mas nenhuma nova avaliação do valor de buffer de estêncil pode ser feita. Se o teste de profundidade finalizar com sucesso, então o teste de estêncil é executado. Ações alternadas poderão ser executadas dependendo do resultado do teste de estêncil.
O valor de referência de estêncil é definido usando setStencilReferenceValue()
.
Parâmetros
triangleFace:String (default = "frontAndBack ") — orientações de triângulo permitidas para contribuir para a operação de estêncil. Um de Context3DTriangleFace.
| |
compareMode:String (default = "always ") — operador de teste usado para comparar o valor de referência do estêncil atual e o valor do estêncil de pixel de destino. A cor de pixel de destino e atualização de profundidade serão executadas quando a comparação for true. As ações de estêncil são executadas conforme solicitado nos seguintes parâmetros de ação. O operador de comparação será aplicado como um operador infix entre a corrente e valores de referência de destino, nessa ordem (no pseudocódigo: se stencilReference OPERATOR, o buffer de estêncil será então transmitido ). Utilize uma das constantes definidas na classe Context3DCompareMode.
| |
actionOnBothPass:String (default = "keep ") — ação a ser tomada quando a profundidade e as comparações de estêncil forem finalizadas com sucesso. Utilize uma das constantes definidas na classe Context3DStencilAction.
| |
actionOnDepthFail:String (default = "keep ") — ação a ser tomada quando a comparação de profundidade falha. Utilize uma das constantes definidas na classe Context3DStencilAction.
| |
actionOnDepthPassStencilFail:String (default = "keep ") — ação a ser tomada quando passos de comparação de profundidade e a comparação de estêncil falham. Utilize uma das constantes definidas na classe Context3DStencilAction.
|
Lança
Error — Erro de enumeração inválida: quando triangleFace não é um dos valores definidos na classe Context3DTriangleFace.
| |
Error — Erro de enumeração inválida: quando compareMode não é um dos valores definidos na classe Context3DCompareMode.
| |
Error — Erro de enumeração inválida: quando actionOnBothPass , actionOnDepthFail ou actionOnDepthPassStencilFail não é um dos valores definidos na classe Context3DStencilAction.
|
Elementos da API relacionados
Exemplo ( Como usar este exemplo )
- Limpar buffer de estêncil para 0.
- Definir a ação de estêncil para incrementar quando o teste de estêncil passar.
- Definir o valor de referência de estêncil como 0.
- Desenhar a máscara triangular. Sempre que desenhar o triângulo, o teste do estêncil passa porque o buffer de estêncil foi limpo para 0 e o valor de referência é 0. Por conseguinte, o buffer de estêncil é incrementado para 1 onde a máscara de triângulo é desenhada.
- Altere a ação de estêncil para guardar para que as operações de desenho subsequentes não alterem o buffer de estêncil.
- Desenhe um retângulo de tela cheia (multicolorida). Como o valor de referência de estêncil ainda é 0, o teste de estêncil falha na área mascarada. Assim, o retângulo é desenhado em todo lugar exceto na região mascarada.
- Defina o valor de referência de estêncil como 1.
- Desenhe outro retângulo de tela cheia (vermelho). Agora o teste de estêncil falha sempre, exceto a área mascarada, que foi incrementada para 1. Assim o retângulo só é desenhado na região mascarada.
Mova o mouse sobre o exemplo para ver as etapas principais na sequência.
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
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Define o valor de comparação de estêncil usado em testes de estêncil.
Somente os 8 bits mais baixos do valor de referência são usados. O valor do buffer de estêncil também é de 8 bits no comprimento. Use readMask
e writeMask
para usar o buffer de estêncil como um campo de bit.
Parâmetros
referenceValue:uint — um valor de referência de 8 bits usado na referência valoriza os testes de comparação.
| |
readMask:uint (default = 255 ) — uma máscara de 8 bits aplicada tanto ao valor de buffer do estêncil atual quanto ao valor de referência antes da comparação.
| |
writeMask:uint (default = 255 ) — uma máscara de 8 bits aplicada ao valor de referência antes de atualizar o buffer de estêncil.
|
Elementos da API relacionados
setTextureAt | () | método |
public function setTextureAt(sampler:int, texture:flash.display3D.textures:TextureBase):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Especifica a textura a ser utilizada para um registro de entrada de textura de um programa de fragmento.
Um programa de fragmento poderá ler informações de até oito objetos de textura. Utilize esta função para designar um objeto Texture ou CubeTexture a um dos registros do classificador utilizados pelo programa de fragmento.
Nota: se você alterar o programa de fragmento ativo (com setProgram
) para um sombreador que utilize menos texturas, defina os registros não utilizados emnull
:
setTextureAt( 7, null );
Parâmetros
sampler:int — o índice de registro do classificador, um valor de 0 a 7.
| |
texture:flash.display3D.textures:TextureBase — o objeto de textura para se tornar disponível, uma instância de Texture ou CubeTexture.
|
Saiba mais
Elementos da API relacionados
CubeTexture
setVertexBufferAt | () | método |
public function setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11, AIR 3 |
Especifica que componentes de dados de vértice correspondem a um vértice único de entrada de programa sombreador.
Utilize o método setVertexBufferAt
para identificar quais componentes dos dados definidos para cada vértice em um buffer VertexBuffer3D pertencem a que entradas do programa de vértice. O desenvolvedor do programa de vértice determina quantos dados são necessários por vértice. Os dados são mapeados de 1 ou mais fluxo(s) VertexBuffer3D
para os registros de atributo do programa sombreador de vértice.
A unidade mais pequena de dados consumidos pelo sombreador de vértice é um dado 32 bits. Os deslocamentos na fluxo de vértice são especificados em múltiplos de 32 bits.
Como um exemplo, um programador poderia definir cada vértice com os seguintes dados:position: x float32 y float32 z float32 color: r unsigned byte g unsigned byte b unsigned byte a unsigned byteSupondo que o vértice foi definido em um objeto VertexBuffer3D denominado
buffer
, ele poderia ser atribuído a um sombreador de vértice com o seguinte 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 — o índice do registro de atributo no sombreador do vértice (0 a 7).
| |
buffer:VertexBuffer3D — o buffer que contém os dados de vértice de origem que serão alimentados no sombreador de vértice.
| |
bufferOffset:int (default = 0 ) — um deslocamento do início dos dados de um vértice único no qual deverá ser iniciada a leitura deste atributo. No exemplo em cima, os dados de posição possuem um deslocamento de 0 porque eles são o primeiro atributo; a cor possui um deslocamento de 3 porque o atributo de cores segue três valores de posição 32 bits. O deslocamento é especificado em unidades de 32 bits.
| |
format:String (default = "float4 ") — um valor da classe Context3DVertexBufferFormat que especifica o tipo de dados deste atributo.
|
Lança
Error — Erro de enumeração inválida: quando o formato não é um dos valores definidos na classe Context3DVertexBufferFormat.
| |
RangeError — Registro de Atributo Fora dos Limites: quando o parâmetro index está fora do alcance de 0 a 7. (Um máximo de oito registros de atributo de vértice poderão ser utilizados por um sombreador.)
|
Saiba mais
Elementos da 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 ); } } }
Wed Jun 13 2018, 11:10 AM Z