Немного математики и анимации - PullRequest
2 голосов
/ 16 января 2011

У меня есть текстура травы:

alt text

Я использую ее в своей 2d-игре.Я хочу анимировать его по коду без каких-либо предопределенных анимаций.

Трава должна взаимодействовать с ветром.Поэтому, когда ветер сильнее, трава должна опускаться в нужную сторону.

Первая версия анимации, которую я сделал с использованием функции синусоиды, но такая анимация немного уродливая, потому что основание травы движется влево / вправокак и все остальные части картины.А с помощью синусоиды я не могу регулировать наклон изображения.

alt text

Любые советы?

Ответы [ 3 ]

4 голосов
/ 16 января 2011

Это то, что вы можете легко получить, сдвигая пиксели:

alt text

Хотя, вероятно, это не очень полезно для вас, вот программа Mathematica:

f[l_, sh_] := Module[{c = l, k = (Dimensions@l)[[1]]},
  For[i = 1, i <= k, i++,
   c[[i]] = RotateRight[l[[i]], IntegerPart[(k + 1 - i)/sh]]];
  Return[c];]

b = ArrayPad[ImageData@a, {{40}, {40}, {0}}, {1, 1, 1}];
Export["c:\\anim.gif", 
 {Image@b, Image@f[b, 7],
  Image@f[b, 5], Image@f[b, 3],
  Image@f[b, 5], Image@f[b, 7], Image@b}, "DisplayDurations" -> .3]

Редактировать

Но вы можете получить лучший эффект, применив круговое преобразование:

alt text

b = Image@ArrayPad[ImageData@a, {{40, 0}, {40}, {0}}, {1, 1, 1}];
f[image_, angleMult_] := ImageForwardTransformation[image, (
    fi = ArcTan[Abs[#[[2]]/(#[[1]] - .5)]];
    fi1 = angleMult fi (#[[1]]^2 + #[[2]]^2)/2;
    {(1/2 - Sin[fi1] #[[2]] - Cos[fi1]/2 + 
       Cos[fi1] #[[1]]), -Sin[fi1]/2 + Sin[fi1] #[[1]] + 
      Cos[fi1] #[[2]]}) &]
t = Table[f[b, x], {x, 0, .2, .02}];
t1 = Reverse@t;
Export["c:\\anim.gif", Join[t, t1], "DisplayDurations" -> .15];
Import["c:\\anim.gif", "Animation"]
0 голосов
/ 16 января 2011

Как вы отображаете текстуру? При использовании рекламного щита вы можете манипулировать его вершинами и даже триангулировать рекламный щит для большего контроля.

0 голосов
/ 16 января 2011

Вы можете просто сдвинуть строки, например, каждый 3-й ряд сдвигается на 1 пиксель вправо, начиная с нижнего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...