Reynbow

09-04-2014, 11:40 AM

Hey ladies and gentleman,

I'm trying to undistort a webcam by using a shader and I already have the specific parameters for the camera. I never used shader before and I'm also not using unity, but the only bit of code that i found which could be useful for me was this, which was written for CG in Unity:

i.imgur.com/4tN8Pg4.png (shown as text below)

So I want to know how you translate that bit of code to a GLSL shader so i can use it (namely in x3d) I already tried several programs to automaticly do it, but they always failed.

I hope somebody can help me out!

uniform sampler2D _MainTex;

uniform float _F1;

uniform float _F2;

uniform float _OX;

uniform float _OY;

uniform float _K1;

uniform float _K2;

uniform float _K3;

uniform float _K4;

fixed4 frag (v2f_img i) : COLOR {

float2 ff = {_F1,_F2};

float2 xy = (i.uv - float2(_OX,_OY) / _ScreenParams.xy) / ff;

float r = sqrt(dot(xy,xy));

float r2 = r*r;

float r4 = r2 * r2;

float coeff = (_K1 * r2 + _K2 * r4);

float dx = _K3 * 2.0 * xy.x*xy.y + _K4*(r2+2.0*xy.x*xy.x);

float dy = _K3*(r2+2.0*xy.y*xy.y) + _K4*2.0*xy.x * xy.y;

xy = (((xy + xy * coeff.xx + float2(dx,dy)) * ff) + float2(_OX,_OY)) / _ScreenParams.xy;

fixed4 main = tex2D(_MainTex, xy);

return main;

}

I'm trying to undistort a webcam by using a shader and I already have the specific parameters for the camera. I never used shader before and I'm also not using unity, but the only bit of code that i found which could be useful for me was this, which was written for CG in Unity:

i.imgur.com/4tN8Pg4.png (shown as text below)

So I want to know how you translate that bit of code to a GLSL shader so i can use it (namely in x3d) I already tried several programs to automaticly do it, but they always failed.

I hope somebody can help me out!

uniform sampler2D _MainTex;

uniform float _F1;

uniform float _F2;

uniform float _OX;

uniform float _OY;

uniform float _K1;

uniform float _K2;

uniform float _K3;

uniform float _K4;

fixed4 frag (v2f_img i) : COLOR {

float2 ff = {_F1,_F2};

float2 xy = (i.uv - float2(_OX,_OY) / _ScreenParams.xy) / ff;

float r = sqrt(dot(xy,xy));

float r2 = r*r;

float r4 = r2 * r2;

float coeff = (_K1 * r2 + _K2 * r4);

float dx = _K3 * 2.0 * xy.x*xy.y + _K4*(r2+2.0*xy.x*xy.x);

float dy = _K3*(r2+2.0*xy.y*xy.y) + _K4*2.0*xy.x * xy.y;

xy = (((xy + xy * coeff.xx + float2(dx,dy)) * ff) + float2(_OX,_OY)) / _ScreenParams.xy;

fixed4 main = tex2D(_MainTex, xy);

return main;

}