Главная / Action Script 3
Пакетflash.filters
Классpublic class ShaderFilter
НаследованиеShaderFilter Inheritance BitmapFilter Inheritance Object

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Класс ShaderFilter применяет фильтр, выполняя шейдеры на объекте, к которому применяется фильтр. Объект, к которому применен фильтр, используется в качестве входящих данных для шейдера, а выходные данные после выполнения шейдера являются результатом применения фильтра.

Новый фильтр можно создать с помощью конструктора new ShaderFilter(). Выбор фильтра зависит от объекта, к которому требуется его применить:

При применении фильтра к визуализируемому объекту свойство cacheAsBitmap этого объекта принимает значение true. Если удалить все фильтры, будет восстановлено исходное значение cacheAsBitmap.

Этот фильтр поддерживает масштабирование рабочей области. Тем не менее, он не поддерживает общее масштабирование, повороты и искажение. Если сам объект увеличен или уменьшен (т.е. если свойства scaleX и scaleY не равны 100%), фильтр не масштабируется. Он масштабируется, только когда пользователь применяет увеличение к самой рабочей области.

Невозможно применить фильтр к изображениям, если их получившаяся длина или ширина превышает 2880 пикселов. Например, при масштабировании большого фрагмента ролика, к которому применен фильтр, фильтр будет снят, если получившееся изображение окажется более 2880 пикселов в длину или в ширину.

Для задания экземпляра шейдера, который будет использоваться вместе с фильтром, необходимо передать экземпляр шейдера в виде аргумента конструктору ShaderFilter() или задать его как значение свойства shader.

Чтобы действие шейдера не было ограничено пределами объекта, к которому применен фильтр, пользуйтесь свойствами leftExtension, rightExtension, topExtension и bottomExtension.

Посмотреть примеры

См. также

flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
flash.display.BitmapData.applyFilter()
flash.display.Shader
Использование затенения в качестве фильтра


Общедоступные свойства
 СвойствоОпределено
  bottomExtension : int
Прирост в пикселах с нижней стороны целевого объекта.
ShaderFilter
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
  leftExtension : int
Прирост в пикселах с левой стороны целевого объекта.
ShaderFilter
 Inheritedprototype : Object
[статические] Ссылка на модель объекта класса или функции.
Object
  rightExtension : int
Прирост в пикселах с правой стороны целевого объекта.
ShaderFilter
  shader : Shader
Шейдер для использования с этим фильтром.
ShaderFilter
  topExtension : int
Прирост в пикселах с верхней стороны целевого объекта.
ShaderFilter
Общедоступные методы
 МетодОпределено
  
ShaderFilter(shader:Shader = null)
Создает новый фильтр "Шейдер".
ShaderFilter
 Inherited
Возвращает объект BitmapFilter, являющийся точной копией исходного объекта BitmapFilter.
BitmapFilter
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
Сведения о свойстве
bottomExtensionсвойство
bottomExtension:int  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Прирост в пикселах с нижней стороны целевого объекта.

Прирост — это область за границами целевого объекта, передаваемая шейдеру во время выполнения. Во время выполнения Flash Player вычисляет нормальные границы фрагмента ролика и расширяет их на основании значений leftExtension, rightExtension, topExtension и bottomExtension.

Значение по умолчанию 0



Реализация
    public function get bottomExtension():int
    public function set bottomExtension(value:int):void
leftExtensionсвойство 
leftExtension:int  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Прирост в пикселах с левой стороны целевого объекта.

Прирост — это область за границами целевого объекта, передаваемая шейдеру во время выполнения. Во время выполнения Flash Player вычисляет нормальные границы фрагмента ролика и расширяет их на основании значений leftExtension, rightExtension, topExtension и bottomExtension.

Значение по умолчанию 0



Реализация
    public function get leftExtension():int
    public function set leftExtension(value:int):void
rightExtensionсвойство 
rightExtension:int  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Прирост в пикселах с правой стороны целевого объекта.

Прирост — это область за границами целевого объекта, передаваемая шейдеру во время выполнения. Во время выполнения Flash Player вычисляет нормальные границы фрагмента ролика и расширяет их на основании значений leftExtension, rightExtension, topExtension и bottomExtension.

Значение по умолчанию 0



Реализация
    public function get rightExtension():int
    public function set rightExtension(value:int):void
shaderсвойство 
shader:Shader  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Шейдер для использования с этим фильтром.

Шейдер, назначенный свойству shader, должен указывать хотя бы на одно входное значение image4. В коде не обязательно указывать код с помощью ассоциативного свойства input объекта ShaderInput. Вместо этого объект, к которому применяется фильтр, автоматически становится первым значением входа (вход с индексом 0). Шейдер, используемый в качестве фильтра, может задавать более одного входа. В этом случае любые дополнительные входы должны быть заданы через свойство input экземпляра ShaderInput.

При назначении экземпляра шейдера данному свойству создается внутренняя копия шейдера, а операция фильтра использует эту копию, а не ссылку на исходный файл Все изменения, производимые над шейдером, например изменение значения параметров, входа или байт-кода, не влияют на скопированный шейдер, к которому обращается фильтр. Чтобы изменения отражались и на шейдере при выводе результатов фильтра, необходимо переназначить экземпляр шейдера свойству shader.



Реализация
    public function get shader():Shader
    public function set shader(value:Shader):void
topExtensionсвойство 
topExtension:int  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Прирост в пикселах с верхней стороны целевого объекта.

Прирост — это область за границами целевого объекта, передаваемая шейдеру во время выполнения. Во время выполнения Flash Player вычисляет нормальные границы фрагмента ролика и расширяет их на основании значений leftExtension, rightExtension, topExtension и bottomExtension.

Значение по умолчанию 0



Реализация
    public function get topExtension():int
    public function set topExtension(value:int):void
Сведения о конструкторе
ShaderFilter()Конструктор
public function ShaderFilter(shader:Shader = null)

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Создает новый фильтр "Шейдер".

Параметры
shader:Shader (default = null) — Шейдер для использования с этим фильтром. Подробные сведения и ограничения, которым должен подчиняться шейдер, см. в описании свойства shader.

См. также

Примеры Как пользоваться примерами
ShaderFilterExample.1.as

В следующем примере показан код, который загружает шейдер, используемый в качестве свойства shader класса ShaderFilter. Этот код рисует круг в экземпляре спрайта и добавляет его к сцене. При загрузке шейдера к этому спрайту применяется фильтр шейдера.

Обратите внимание, что в этом примере мы исходим из того, что существует файл байт-кодов с именем gradient.pbj, хранящийся в каталоге, который является выходным для приложения.


//
// Source code for the shader:
//
<languageVersion : 1.0;>

kernel RedGradientFilter
<
    namespace: "Adobe::Example";
    vendor: "Adobe examples";
    version: 1;
    description: "Applies a gradient across the red channel of the input image.";
>
{
    input image4 src;
    output pixel4 dst;
    
    parameter float width
    <
        description: "The width of the image to which the shader is applied.";
        minValue: 0.0;
    >;

    void evaluatePixel()
    {
        pixel4 temp = sampleNearest(src, outCoord());
        temp.r = 1.0 - (outCoord().x * (1.0 / width));
        dst = temp;
    }
}

//
// ActionScript source code:
//
package {
    import flash.display.Shader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.filters.ShaderFilter;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;

    public class ShaderFilterExample extends Sprite {
        
        private var loader:URLLoader;
        private var s:Sprite;
        
        public function ShaderFilterExample() {
            loader = new URLLoader();
            loader.dataFormat = URLLoaderDataFormat.BINARY;
            loader.addEventListener(Event.COMPLETE, loadCompleteHandler);
            loader.load(new URLRequest("gradient.pbj"));
            
            s = new Sprite();
            s.graphics.beginFill(0x009900);
            s.graphics.drawCircle(100, 100, 100);
            addChild(s);
        }
        
        private function loadCompleteHandler(event:Event):void {
            var shader:Shader = new Shader(loader.data);
            shader.data.width.value = [s.width];
            
            var gradientFilter:ShaderFilter = new ShaderFilter(shader);
            s.filters = [gradientFilter];
        }
    }
}