Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Vector.<Number> и Shader (http://www.flasher.ru/forum/showthread.php?t=128364)

Герыч 06.08.2009 00:27

Vector.<Number> и Shader
 
Вопрос, как правильно организовать работу шейдера с вектором(в документации толком об этом не нашёл, везде работа с изображением).
Ну к примеру такая тривиальная задача:
Получить аналог такой операции в шейдерах
Код AS3:

var v1:Vector.<Number>;
var v2:Vector.<Number>;
var k1:Number;
var k2:Number;
var i:int;
v1=new Vector.<Number>(100,true);
v2=new Vector.<Number>(100,true);
k1=0.1;
k2=0.4;
for(i=0;i<100;i++)
        v1[i]=i;
 
for(i=0;i<100;i++)              //вот этой
        v2[i]=k1*(v1[i]-k2);

интересует правильный код pixel bender'а.
Мой вариант:
Код:

<languageVersion : 1.0;>

kernel VectorShader
<  namespace : "Your Namespace";
    vendor : "Your Vendor";
    version : 1;
    description : "your description";
>
{
    input image1 src;
    output pixel1 dst;

    void
    evaluatePixel()
    {
        dst = 0.1*(sampleNearest(src,outCoord())+0.4);
    }
}

компилятор Pixel Bender'а ругается вот такими словами на эту строку dst = 0.1*(sampleNearest(src,outCoord())+0.4);
Цитата:

ERROR: (line 16): 'dst' : cannot have 1 or 2 channel outputs
но мне не нужно 3 канала в output'е!
Как быть?

Яски 06.08.2009 01:34

Напиши для трех, потом считывай по три. Так скорей всего и работать быстрее будет.

r_r_f_r 06.08.2009 01:36

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

Т.е. им ничего не посчитать(такой же скриптовый язык, только второй поток для флеша, больше толку нет в рассчётах), взгляните лучше в сторону алхимии если уж есть желание 4мс превратить в 3.5мс:)

Герыч 06.08.2009 01:39

Сделал по 3. но поскольку мне других данных не надо, то в шейдер работает в "холостую". Вот нашёл статейку-пример на эту тему. Работает пока шейдер в разы медленней чем простой цикл с просчётом для кажого элемента..

alekslitvinenk 06.08.2009 02:17

В доках сказано что PixelBender поддерживает только 3-4 выходных канала...

Цитата:

Implementation issues:
Pixel Bender supports only 3- or 4-channel output images.

Герыч 06.08.2009 15:25

Разобрался я примерно с работой Pixel Bender'а. Я так понял на вход можно подавать совершенно различные изображения, любой размерности(неодинаковые и не зависящие от выхода) и в любом количестве(даже ни одного).
Так вот, есть задача в BitmapData построить metaball'ы
как пока я понимаю, на вход надо подать параметр радиус и вектор типа image2 с координатами центров шаров.
но pixel bender не даёт возможности пробежаться по всем шарам входного вектора и для каждого пикселя выхода занести в него именно сумму функций скажем 50 меташаров... как выкрутиться в такой ситуации?

r_r_f_r 06.08.2009 16:39

Цитата:

как выкрутиться в такой ситуации?
Bender придумывался не для флеша, и точно не для рассчётов.
Производительность возможно и чуть повыше будет, но писать в ByteArray 1к значений на каждую итерацию, и собственно вызов чего-то инородного, убивают эту производительность.

Ответ - удалить наработки:)


Часовой пояс GMT +4, время: 14:58.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.