Posted By: 3run
vecViewPort and viewport resolution (in pixels) - 03/27/20 19:01
Hey!
I was trying to convert some glsl shaders from shadertoy webpage and faced problem with finding viewport resolution (in pixels). I thought that it should be vecViewPort, but I couldn't get it working...
This is the one I was trying to convert:
shockwave2
And this is what I have so far:
I found out, that when I use 1.0 instead of vecViewPort, it 'kinda works'. I would be glad if you will poke me in the right direction!
Greets.
I was trying to convert some glsl shaders from shadertoy webpage and faced problem with finding viewport resolution (in pixels). I thought that it should be vecViewPort, but I couldn't get it working...
This is the one I was trying to convert:
shockwave2
And this is what I have so far:
Code
const float4 vecTime; const float4 vecViewPort; texture TargetMap; sampler postTex = sampler_state { texture = <TargetMap>; MinFilter = Linear; MagFilter = Linear; MipFilter = Linear; AddressU = Clamp; AddressV = Clamp; }; float4 FP(float2 TexCoords: TEXCOORD0) : COLOR { // Sawtooth calc of time float offset = (vecTime.w - floor(vecTime.w)) / vecTime.w; float time = vecTime.w * offset; // Wave design params float3 waveParams = float3(10.0, 0.8, 0.1); // Find coordinate, flexible to different resolutions float maxSize = max(vecViewPort.x, vecViewPort.y); float2 uv = TexCoords.xy / maxSize; // Find center, flexible to different resolutions float2 center = vecViewPort.xy / maxSize / 2.0; // Distance to the center float dist = distance(uv, center); // Original color float4 c = tex2D(postTex, uv); // Limit to waves if(time > 0.0 && dist <= time + waveParams.z && dist >= time - waveParams.z) { // The pixel offset distance based on the input parameters float diff = (dist - time); float diffPow = (1.0 - pow(abs(diff * waveParams.x), waveParams.y)); float diffTime = (diff * diffPow); // The direction of the distortion float2 dir = normalize(uv - center); // Perform the distortion and reduce the effect over time uv += ((dir * diffTime) / (time * dist * 80.0)); // Grab color for the new coord c = tex2D(postTex, uv); // Optionally: Blow out the color for brighter-energy origin //c += (c * diffPow) / (time * dist * 40.0); } return c; } technique vhs { pass one { PixelShader = compile ps_3_0 FP(); } }
Greets.