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

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


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


Ответы (2)


arrow_upward
1
arrow_downward

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

(код находится в 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

arrow_upward
0
arrow_downward

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

person Abhi    schedule 02.09.2010