![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
Всем привет.
Есть шейдер, который реализует эффект засветки области (а-ля лампочка, свет от костра). Пока я его использую, применяя к одному из спрайтов, как blendShader = myShader, все работает отлично. Но беда в том, что мне нужно иметь возможность вывести такой спрайт на битмап дату методом draw(). Этот метод поддерживает выбор типа смешивания BlendMode, однако работают только "родные" типы смешивания. При попытке указать тип смешивания BlendMode.SHADER - ничего не происходит, изображение рисуется, как будто никакого шейдера и нет. var back:Bitmap = new Input1(); // Embed-картинка var fore:Bitmap = new Input2(); // Embed-картинка var shader:Shader = new Shader(new ShaderClass()); fore.blendShader = shader; // применяем шейдер к "верхнему" спрайту var dest:BitmapData = new BitmapData(1024, 600, true, 0x000000); dest.draw(back); dest.draw(fore, fore.transform.matrix, fore.transform.colorTransform, BlendMode.SHADER); // изображение выводиться, но без шейдера addChild(new Bitmap(dest)); Спасибо. |
|
|||||
|
а рисовать весь контейнер с этим безобразием пробовали?
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
Кстати, шейдер точно рабочий? Я с таким на сутки застрял, потом оказалось, что выход подал источник вместо вычисляемого значения.
Последний раз редактировалось Lecosson; 19.11.2010 в 15:37. |
|
|||||
|
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
Весь контейнер с этим безобразием мне рисовать не нужно, мне нужно лишь вывести объекты, которые засветят определенные области.
Шейдер работает, проверял на спрайтах, все блендиться отлично. Но как только пытаюсь использовать метод draw() - никакого результата. |
|
|||||
|
А что такое вообще outCoords()? В шейдерах есть outCoord(), без буквы s вконце.
не знаю как он в blendMode работает, но подозреваю что должен нормально - ведь как же без него-то обойтись, ведь нужен же цикл по координатам в любом случае. по делу -- есть гипотеза, что colorTransform - это сам по себе уже своего рода шейдер. Попробуйте указать null вместо него. вряд ли конечно заработает, но вдруг? и еще такой вопрос. Вы написали, что у вас шейдер а-ля лампочка. Для подобного шейдера на входе нужна только 1 картинка. А blendMode все же используется для наложения одной картинки на другую, и если я ничего не путаю, ему нужно 2 картинки на входе. Так сколько ж картинок на входе у вашего шейдера? И если 2, то зачем для лампочки 2 картинки? |
|
|||||
|
Тогда понятно. Шейдер используемый как режим смешивания - это единственный случай, когда outCoord() /*это расположение обрабатываемой точки*/ не учитывается, всегда равен нулю, т.е. в этом случае шейдер пригоден только для цветовых трансформаций, одинаковых по всей картинке. У вас в шейдере он будет использоваться (скорее всего) для вычисления расстояния от точки до источника цвета.
Т.е. как blendMode работать корректно он не будет. |
|
|||||
|
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
Не, моя лампочка намного проще
. На входе мне нужно именно два изображения: бэк, который я видоизменяю, и изображение цветового пятна, которое используется в качестве значения для расчета, насколько же сильно мне нужно засветить/затемнить фоновое изображение... это выглядит, как будто вы светите фонариком на землю... при чем благодаря второму изображению я меняю не только интенсивность, но и цвет фонаря.Пиксель в шейдере я беру так: Собственно шейдер работает, и работает именно так, как мне нужно. Беда лишь в том, что для его использования я не могу использовать метод BitmapData.draw(), я могу только наложить один спрайт поверх другого. Такой вариант я уже реализовал... но он не очень мне удобен. |
|
|||||
|
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
Ага, я понял Вас, не знаю, не пробовал - мне такой вариант ни чем не лучше. Пока работает с двумя спрайтами, и на том спасибо
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|