- TimeSinunoid
sampler g_samSrcColor : register(s0);
float4 TimeSinunoid_ps (
float2 Tex : TEXCOORD0,
uniform float littleTimer
) : COLOR
{
Tex.y = Tex.y + (sin(littleTimer + Tex.x * 10.0) * 0.01);
Tex.x = Tex.x + (cos(littleTimer + Tex.x * 10.0) * 0.03);
float4 Color = tex2D( g_samSrcColor, Tex.xy);
return Color;
}
記得宣告參數
fragment_program Rz/Compositor/TimeSinusoidFP cg
{
source TimeSinusoidFP.cg
entry_point TimeSinusoid_ps
profiles ps_2_0 arbfp1
default_params
{
param_named_auto littleTimer time
}
}
這裏我們用 Ogre3D的 param_named_auto 語法 將參數設為time的自動參數(詳細參數列表請看 Ogre的Manual)
執行的結果像這樣
它會隨著時間的變化 扭動畫面
- ManySample
sampler g_samSrcColor : register(s0);
float4 ManySample_ps (
float2 Tex : TEXCOORD0,
uniform float littleTimer
) : COLOR
{
float4 Color = tex2D( g_samSrcColor, Tex.xy);
Color += tex2D( g_samSrcColor, Tex.xy + 0.001);
Color += tex2D( g_samSrcColor, Tex.xy + 0.002);
Color += tex2D( g_samSrcColor, Tex.xy + 0.003);
return Color;
}
效果會像這樣有點糊掉 亮度變好幾倍要是我們將它除以纍加的次數
return Color/4.0;
那就變成了模糊的效果
利用sampler的加減運算我們可以做出一些奇特的效果 像邊緣銳利化
sampler g_samSrcColor : register(s0);
float4 ManySample_ps (
float2 Tex : TEXCOORD0,
uniform float littleTimer
) : COLOR
{
float4 Color = tex2D( g_samSrcColor, Tex.xy);
Color += tex2D( g_samSrcColor, Tex.xy + 0.001)*10.0;
Color -= tex2D( g_samSrcColor, Tex.xy - 0.001)*10.0;
return Color;
}
或是浮雕效果
sampler g_samSrcColor : register(s0);
float4 ManySample_ps (
float2 Tex : TEXCOORD0,
uniform float littleTimer
) : COLOR
{
float4 Color;
Color.rgb = 0.5;
Color += tex2D( g_samSrcColor, Tex.xy + 0.001)*2.0;
Color -= tex2D( g_samSrcColor, Tex.xy - 0.001)*2.0;
Color.rgb = (Color.r + Color.g + Color.b)/3.0;
Color.a = 1.0;
return Color;
}
拼色版效果
sampler g_samSrcColor : register(s0);
float4 ManySample_ps (
float2 Tex : TEXCOORD0,
uniform float littleTimer
) : COLOR
{
float4 Color =tex2D( g_samSrcColor, Tex.xy );
if(Color.r < 0.2 || Color.r > 0.8)
Color.r = 0;
else
Color.r = 1.0;
if(Color.g < 0.2 || Color.g > 0.8)
Color.g = 0;
else
Color.g = 1.0;
if(Color.b < 0.2 || Color.b > 0.8)
Color.b = 0;
else
Color.b = 1.0;
return Color;
}
還有黑白效果sampler g_samSrcColor : register(s0);
float4 ManySample_ps (
float2 Tex : TEXCOORD0,
uniform float littleTimer
) : COLOR
{
float4 Color =tex2D( g_samSrcColor, Tex.xy );
Color.rgb = (Color.r + Color.g + Color.b)/3.0;
if(Color.r < 0.2 || Color.r > 0.8)
Color.rgb = 0;
else
Color.rgb = 1.0;
return Color;
}
但是, 我的折射程式到底在那裏呢?







沒有留言:
張貼留言