@Toemsel wrote:
It is hard to get into shader programming. Can anyone recommend me a book or site? I did search for hours and the only thing I got working was this
However, the image crops of. I guess, because the texCoords did change and thus the tex2d() can't read the corresponding pixel anymore. How can I avoid the image crop and the weired extension on the left side? My source so far.
#if OPENGL #define SV_POSITION POSITION #define VS_SHADERMODEL vs_3_0 #define PS_SHADERMODEL ps_3_0 #else #define VS_SHADERMODEL vs_4_0_level_9_1 #define PS_SHADERMODEL ps_4_0_level_9_1 #endif Texture2D SpriteTexture; sampler2D SpriteTextureSampler = sampler_state { Texture = <SpriteTexture>; }; float4x4 projectionMatrix; float4x4 viewMatrix; float gameTime = 1.0; float bendEnd = 0.5; float minValue = 0.1; float strength = 0.005; struct PixelShaderOutput { float4 Color: COLOR0; }; struct VertexShaderOutput { float4 Position : SV_POSITION; float2 TexCoord : TEXCOORD0; float4 Color: COLOR0; }; VertexShaderOutput VertexShaderLogic(float4 position : SV_POSITION, float4 color : COLOR0, float2 texCoord : TEXCOORD0) { VertexShaderOutput output = (VertexShaderOutput)0; output.Position = mul(position, viewMatrix); output.Position = mul(output.Position, projectionMatrix); output.TexCoord = texCoord; output.Color = color; if (output.TexCoord.y < bendEnd) output.TexCoord.x += minValue + sin(gameTime) * strength; return output; } PixelShaderOutput PixelShaderFunction(VertexShaderOutput input) : COLOR0 { PixelShaderOutput output = (PixelShaderOutput)0; output.Color = tex2D(SpriteTextureSampler, input.TexCoord) * input.Color; return output; } float nrand(float2 uv) { return frac(sin(dot(uv, float2(12.9898, 78.233))) * 43758.5453); } technique SpriteDrawing { pass P0 { VertexShader = compile VS_SHADERMODEL VertexShaderLogic(); PixelShader = compile PS_SHADERMODEL PixelShaderFunction(); } };
Posts: 1
Participants: 1