Просмотр полной версии : Шаблон вдоль кривой
Задача следующая: надо растянуть картинку вдоль кривой с повторениями (пример - железная дорога).
Не подскажете готовых решений (или может это как-то поддерживается на уровне базового API ? ) для такой вот проблемы ?
как вариант:
вдоль Path-а Дембицкого лепим фрагментики этой ж.д.
package
{
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import silin.geom.*;//http://silin.su/AS3/silin.zip
public class Main extends Sprite
{
[Embed(source = 'templ.jpg')]
private var _templClass : Class;//сегментик полотна
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
var path:Path = new Path([new Point(10, 10), new Point(100, 50),new Point( 200, 300), new Point(250,350), new Point(300,150)]);
var len:Number = path.length;
for (var i:int = 0; i < len; i+=5) //5 - ширина сегментика
{
var segm:Bitmap = Bitmap(new _templClass());
var p:PathPoint = path.getPathPoint(i);
segm.x = p.x;
segm.y = p.y;
segm.rotation = p.rotation;
addChild(segm);
}
}
}
}
результат (http://silin.su/trash/fillPath.swf)
shaman4d
23.08.2010, 17:05
как вариант:
вдоль Path-а Дембицкого лепим фрагментики этой ж.д. результат (http://silin.su/trash/fillPath.swf)
Что то в месте перегиба не очень...
>>Что то в месте перегиба не очень...
шаблончик бы надо от центра поворачивать, поправл - немного лучше
да и где ты видел, чтобы рельсы так поворачивали :)
shaman4d
23.08.2010, 17:38
>>Что то в месте перегиба не очень...
шаблончик бы надо от центра поворачивать, поправл - немного лучше
да и где ты видел, чтобы рельсы так поворачивали :)
Тада в контексте рельс -- согласен, но допустим если это труба из сегментов или шнур с рифленной поверхрностью.
тогда придется еще и искажать каждый фрагмент в зависости от радиуса кривизны
например смотреть как пересекаются соседние и ужимать/растягивать чтобы это пересечение( или недотягивание) минимизировать
Добавлено через 3 минуты
у Graphics есть еще lineBitmapStyle, может быть оно сработает
но не пробовал даже как и что это
Насколько я понял, LineBitmapStyle это когда линия виступает в качестве маски для картинки.
Я нашел в интернете способ (http://www.neuroproductions.be/experiments/custom-brushes-with-actionscript/) , который базируется на использовании текстурированых треугольников. Как вариант, но картинка не совсем акуратная выходит..
>>но картинка не совсем аккуратная выходит..
а она 'по-жизни' не хочет(не может) быть аккуратной в таком варианте,
см. например обсуждалово http://flasher.ru/forum/showthread.php?t=143470 , там на примере 3D, но сути не меняет
по моим наблюдениям может выйти толк из такого варианта: из твоей изогнутой колбасы сгенерить набор треугольников с соответствующими UV координатами и заливать разом все с помощью drawTriangles - тогда не щелей ни пробелов нет..
но как эти исходные данные готовить не берусь сказать - не вижу ради чего, сори
Ээ, да нормально всё должно быть, если текстурированными треугольниками, самая морока - расставить точки.
Красивая задачка, но пожалуй чуть больше, чем не лень бесплатно делать.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.