Как обернуть изображение вокруг цилиндра в Silverlight

Я пытаюсь обернуть изображение вокруг цилиндра в серебряном свете. Я много смотрел в гугле, но ничего не нашел. Насколько я знаю, это можно сделать с помощью пиксельного шейдера, но не знаю, как это сделать.
Возможно ли это?
Спасибо.


person Samvel Siradeghyan    schedule 31.08.2010    source источник


Ответы (2)


Это не полная намотка на цилиндр, но вы получите начальную идею / пример:

(код находится в GLSL, а не в HLSL, но я думаю, что преобразовать его будет несложно)

uniform sampler2D tex;

void main()
{
 vec2 cen = vec2(0.5,gl_TexCoord[0].y)-gl_TexCoord[0].xy;
 cen = vec2(pow(cen.x,1.7),pow(cen.y,2.2));
 cen.y = 3.9*sin(1.8*gl_TexCoord[0].x-2.3);
 vec2 mcoord = 1.65*vec2(-0.22+gl_TexCoord[0].x,1.95+gl_TexCoord[0].y);
 gl_FragColor = texture2D(tex, mcoord+cen);
}

Из этого

alt text

вы получите что-то вроде этого alt text

Удачи

person Agnius Vasiliauskas    schedule 03.09.2010
comment
Спасибо за ответ. Я попробую это. - person Samvel Siradeghyan; 04.09.2010
comment
Совершенно то, что мне нужно. Если кому-то нужен HLSL, вот его ввод sampler2D: register (s0); float4 main (float2 uv: TEXCOORD): COLOR {float4 color = 0; float2 center = float2 (0,5, ув.х / 2); center = float2 (pow (center.x, 1.7), pow (center.y, 2.2)); center.y = 3.9 * sin (1.8 * uv.x - 2.3); float2 mcoord = 1.65 * float2 (-0.22 + uv.x, 1.95 + uv.y); uv.x = mcoord.x + center.x; uv.y = mcoord.y + center.y; цвет = tex2D (ввод, УФ); возврат (цвет); } По этой ссылке вы можете узнать, как использовать собственные эффекты шейдера: silverlight.net / learn / videos / all / pixel-effects. - person Samvel Siradeghyan; 05.09.2010
comment
можем ли мы получить обобщенный шейдер с входными переменными? - person foson; 09.02.2011

Вы можете попробовать Zam3d. Раньше я использовал пробные версии, и вы можете получить трехмерную фигуру и попробовать установить фон для изображения. Посмотрите, поможет ли это.

person Abhi    schedule 02.09.2010