![]() |
|
||||||||||
|
|||||
|
Lorem ipsum
|
UPD: Окончательная рабочая версия с демкой и инструкциями тут.
<languageVersion : 1.0;>
kernel TransitionBend
< namespace : "Transitions";
vendor : "Vadim BELLinSKY";
version : 1;
description : "Transition Bend";
>
{
// ширина изображения
parameter float width
<
minValue: 0.0;
maxValue: 2880.0;
defaultValue: 0.0;
>;
// высота изображения
parameter float height
<
minValue: 0.0;
maxValue: 2880.0;
defaultValue: 0.0;
>;
// степень сплющивания при переходе
parameter float shrinking
<
minValue: 0.0;
maxValue: 1.0;
defaultValue: 0.25;
>;
// степень затенения
parameter float shading
<
minValue: 0.0;
maxValue: 1.0;
defaultValue: 0.5;
>;
// фаза перехода от первого изображения ко второму
parameter float phase
<
minValue: 0.0;
maxValue: 1.0;
defaultValue: 0.0;
>;
input image4 src1;
input image4 src2;
output pixel4 dst;
const float PI = 3.1415926353;
const float PI_2 = PI * 0.5;
const float PI2 = PI * 2.0;
#define width2 float(width * 0.5)
#define height2 float(height * 0.5)
#define period1 float(PI_2 / height)
#define period2 float(PI / width)
void
evaluatePixel()
{
float2 here = outCoord();
float angle1 = here.y * period1 - (phase * 0.75 - 0.5) * PI2;
angle1 = clamp(angle1, 0.0, PI);
float angle2 = here.x * period2;
float dx = (width2 - here.x);
dx /= cos(angle1);
float dy = (height2 - here.y);
dy *= 1.0 + shrinking * sin(phase * PI) * (1.0 + sin(angle2));
if (angle1 > PI_2)
{
dst = sampleNearest(src1, float2(width2 + dx, height2 - dy));
}
else
{
dst = sampleNearest(src2, float2(width2 - dx, height2 - dy));
}
if (abs(dx) > width2 || abs(dy) > height2)
{
dst.a = 0.0;
}
dst.rgb *= 1.0 - (1.0 - abs(cos(angle1))) * shading;
}
}
shader.data.width.value = [_ширина изображения_]; shader.data.height.value = [_высота изображения_]; shader.data.src1.input = _bitmapData1_; shader.data.src2.input = _bitmapData2_; shader.data.shrinking.value = [_степень сплющивания от 0 до 1_]; // можно опустить, по умолчанию 0.25; shader.data.shading.value = [_степень затенения от 0 до 1_]; // можно опустить, по умолчанию 0.5; shader.data.phase.value = [_фаза от 0 до 1_];
__________________
Поймай яблоко 2! Последний раз редактировалось Zebestov; 07.06.2012 в 12:38. |
|
|||||
|
Lorem ipsum
|
Спасибо )
__________________
Поймай яблоко 2! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Красиво
![]() |
|
|||||
|
Lorem ipsum
|
Спасибо!
Блог я только начал, потому и помалкиваю ) И опять-таки благодарю )
__________________
Поймай яблоко 2! |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:28. |
|
|
« Предыдущая тема | Следующая тема » |
|
|