|
|
|||||
Цитата:
Добавлено через 54 секунды Цитата:
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Ты пытаешься крутить меш, изменяя его вершины, надо "крутить" x,y, передаваемые в:
Цитата:
Добавлено через 4 минуты Оставь вершинный код базовым, какой есть. Добавлено через 4 минуты И крути в пиксельном. Добавлено через 6 минут Знать о вершинах и разрешений экрана не нужно, нужны только обычные uv в v0 и сила закручивания, передаваемая константой.
__________________
Дети не должны знать о своих родителях |
|
|||||
function(x:Number, y:Number, strength:Number):Point { return new Point(Math.sin(x * strength, y)); // Вертикальная волна с амплитудой длиною в текстуру. } name = "screen"; vertexCode += "mov op, va0\n"; vertexCode += "mov v0, va1\n"; // uv // distortion vertexCode += "mov v1, vc0\n"; // stageWidth, stageHeight fragmentCode = "mov ft1, v0\n"; // uv fragmentCode += "mul ft2.x, ft1.x, v1.x\n"; // u * stageWidth fragmentCode += "sin ft2.x, ft2.x\n"; // sin(u * stageWidth) fragmentCode += "add ft1.x, ft1.x, ft2.x\n"; // u = sin(u * stageWidth) fragmentCode += "tex ft0, ft1, fs0 <2d,nearest,clamp>\n"; fragmentCode += "mov oc, ft0\n";
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Готовый пример синусоидального дисторшена решил бы все мои проблемы. Хоть убейте, но понять не могу. Результаты соответствующие.
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Опробуй, синусоидальный дисторшен:
package game.view.filters { 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 Tails */ public class Wave extends FragmentFilter{ // Приват private var _programWave:Program3D; // Шейдер отрисовки private var _programNormal:Program3D; // Обычный шейдер private var _parameters:Vector.<Number>; // Вектор для передачи параметров фильтра /** * Создать фильтр волнового деформирования. */ public function Wave() { /** * [0] - Количество волн. * [1] - Ширина волны по горизонтали. * [2] - Y смещение * [3] - 0 */ _parameters = new <Number>[50, .1, 3.14, 0]; _parameters.fixed = true; } // ГЕТТЕР-СЕТТЕРЫ /// Количество волн. public function get waveNum():Number { return _parameters[0]; } public function set waveNum(value:Number):void { _parameters[0] = value; } /// Ширина волны по горизонтали. public function get waveSize():Number { return _parameters[1]; } public function set waveSize(value:Number):void { _parameters[1] = value; } /// Отступ волны сверху, где полный цикл = 2PI public function get waveStep():Number { return _parameters[2]; } public function set waveStep(value:Number):void { _parameters[2] = value; } // ОПРЕДЕЛЕНИЕ override protected function activate(pass:int, context:Context3D, texture:Texture):void { if(_parameters[1] > 0){ context.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 0, _parameters); context.setProgram(_programWave); }else { context.setProgram(_programNormal); } } protected override function createPrograms():void { var fragmentProgramCode:String = // Перенос координат в переменную + смещение для синуса "mov ft0, v0 \n" + // Количество волн по вертикали: "mul ft0.x, ft0.y, fc.x \n" + "add ft0.x, ft0.x, fc.z \n" + "sin ft0.x, ft0.x \n" + // Уменьшаем велечину волны по горизонтали: "mul ft0.x, ft0.x, fc0.y \n" + "add ft0.x, v0.x, ft0.x \n" + "tex ft0, ft0, fs0 <2d, clamp, linear, mipnone> \n" + "mov oc, ft0 \n"; _programWave = assembleAgal(fragmentProgramCode, STD_VERTEX_SHADER); _programNormal = assembleAgal(STD_FRAGMENT_SHADER, STD_VERTEX_SHADER); } // УДАЛЕНИЕ public override function dispose():void{ _programNormal.dispose(); _programWave.dispose(); super.dispose(); } } }
__________________
Дети не должны знать о своих родителях |
|
|||||
Спасибо! Работает! Сейчас буду изучать.
__________________
Я заклинаю вас действовать иначе. |
|
|||||
А можешь формулу на ас3 написать?
__________________
Я заклинаю вас действовать иначе. |
Часовой пояс GMT +4, время: 16:00. |
|
« Предыдущая тема | Следующая тема » |
|
|