Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.08.2009, 00:27
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 1  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
Attention 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
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 2  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
Напиши для трех, потом считывай по три. Так скорей всего и работать быстрее будет.
__________________
TankiOnline
Я разработчик Alternativa3D

Старый 06.08.2009, 01:36
r_r_f_r вне форума Посмотреть профиль Отправить личное сообщение для r_r_f_r Найти все сообщения от r_r_f_r
  № 3  
Ответить с цитированием
r_r_f_r

Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
Записывать нули на остальных каналах.
На выход Bender не умеет отдавать ничего кроме картинок, не был он рассчитан для флеша.

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

Старый 06.08.2009, 01:39
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 4  
Ответить с цитированием
Герыч
 
Аватар для Герыч

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

Старый 06.08.2009, 02:17
alekslitvinenk вне форума Посмотреть профиль Отправить личное сообщение для alekslitvinenk Посетить домашнюю страницу alekslitvinenk Найти все сообщения от alekslitvinenk
  № 5  
Ответить с цитированием
alekslitvinenk
 
Аватар для alekslitvinenk

Регистрация: Oct 2005
Адрес: Москва
Сообщений: 491
Отправить сообщение для alekslitvinenk с помощью ICQ Отправить сообщение для alekslitvinenk с помощью AIM Отправить сообщение для alekslitvinenk с помощью Skype™
В доках сказано что PixelBender поддерживает только 3-4 выходных канала...

Цитата:
Implementation issues:
Pixel Bender supports only 3- or 4-channel output images.

Старый 06.08.2009, 15:25
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 6  
Ответить с цитированием
Герыч
 
Аватар для Герыч

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

Старый 06.08.2009, 16:39
r_r_f_r вне форума Посмотреть профиль Отправить личное сообщение для r_r_f_r Найти все сообщения от r_r_f_r
  № 7  
Ответить с цитированием
r_r_f_r

Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
Цитата:
как выкрутиться в такой ситуации?
Bender придумывался не для флеша, и точно не для рассчётов.
Производительность возможно и чуть повыше будет, но писать в ByteArray 1к значений на каждую итерацию, и собственно вызов чего-то инородного, убивают эту производительность.

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
pixel bender

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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