![]() |
|
||||||||||
|
|||||
|
Есть около 100 Image-s на экране.
Нужен способ сделать всех чёрно-белыми (потом еще красными). Фильтр не подходит, так как на довольно сильном десктоп гпу (i5-2500) падает до 17 кадров в секунду. Для кеширования фильтров нужно создавать фильтр для каждого имажа. Создание дополнительных текстур рассматривается в последнюю очередь. Буду рад любым советам и ответам! |
|
|||||
|
Способ 1: Пишете на AGAL шейдер, который будет перекрашивать объекты на экране в реальном времени.
Способ 2: Пишете на PixelBender шейдер, который перед запуском сразу создаст перекрашенную текстуру. Можно комбинировать, сначала создать одну чб текстуру перед запуском, а затем подкрашивать разные image разными цветами при помощи AGAL.
__________________
Дети не должны знать о своих родителях |
|
|||||
|
да, про агал не вспомнил, спасибо! ушел ковырять!
|
|
|||||
|
BW фильтр на AGAL, что-бы проще было разбираться:
package mvc.view.shaders { import starling.textures.Texture; import flash.display3D.Context3D; import flash.display3D.Program3D; import starling.animation.IAnimatable; import starling.filters.FragmentFilter; import flash.display3D.Context3DProgramType; /** * Чёрно-белый шейдер. * @author iiNode */ public class NoColor extends FragmentFilter{ // Приват private var _program:Program3D; // Шейдер отрисовки private var _parameters:Vector.<Number>; // Вектор для передачи параметров фильтра /// Создать фильтр чёрно-белого вывода. public function NoColor() { super(); _parameters = new Vector.<Number>(4, true); _parameters[0] = 3; _parameters[1] = 0; _parameters[2] = 0; _parameters[3] = 0; } // ОПРЕДЕЛЕНИЕ override protected function activate(pass:int, context:Context3D, texture:Texture):void { context.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 0, _parameters); context.setProgram(_program); } protected override function createPrograms():void { var fragmentProgramCode:String = // Среднее арифметическое от суммы цветовых каналов. // Чёрно-белый цвет. "tex ft0, v0, fs0 <2d, clamp, linear, mipnone> \n" + "add ft1.x, ft0.x, ft0.y \n" + "add ft1.x, ft1.x, ft0.z \n" + "div ft0.x, ft1.x, fc0.x \n" + "mov ft0.yz, ft0.xx \n" + "mov oc, ft0 \n"; _program = assembleAgal(fragmentProgramCode, STD_VERTEX_SHADER); } // УДАЛЕНИЕ public override function dispose():void{ _program.dispose(); super.dispose(); } } }
__________________
Дети не должны знать о своих родителях |
|
|||||
|
Уже +10 кадров есть с вашим классом!
А что там еще можно оптимизировать? |
|
|||||
|
Не знаю, вам виднее должно быть
![]() Это зависит от конкретной задачи. Опишите более подробно во всех деталях, что именно вы хотите сделать.
__________________
Дети не должны знать о своих родителях |
|
|||||
|
тут хорошо видно - http://sk-express.ru/plantasia/ (выбрать любой уровень)
есть поле с цветами, 80 типов спрайта (20 типов цветов по 4 фазы каждый), в какой то момент все цветы могут стать серыми, затем красными используется as3isolib портированный на старлинг, у каждого iso объекта есть свой спрайт цветка в контейнере сейчас ко всем имажам применен фильтр, для теста |
|
|||||
|
Демка у меня летает. Правда, точно fps посмотреть не смог, датчик слишком мелкий, не разобрать. Вообщем, такое количество спрайтов не должно особо напрягать gpu.
С isolib не знаком, но могу дать несколько советов по Starling:
__________________
Дети не должны знать о своих родителях |
|
|||||
|
ctrl - + на странице
или кнопка FullScreen там снизу на часах |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:03. |
|
|
« Предыдущая тема | Следующая тема » |
|
|