今天,查找了下桶形畸变,特分享如下:
顶点缓冲区
void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}
片元着色器
uniform sampler2D colorMap;
const float PI = 3.1415926535;
const float BarrelPower = 0.5; //可调
vec2 Distort(vec2 p )
{
float theta = atan(p.y, p.x );
float radius = length(p);
radius = pow(radius, BarrelPower);
p.x = radius * cos(theta);
p.y = radius * sin(theta);
return 0.5 * ( p+1.0);
}
void main(void)
{
vec2 xy = 2.0 * gl_TexCoord[0].xy - 1.0;
vec2 uv;
float d = length(xy);
if( d < 1.0 )
{
uv = Distort(xy);
}
else
{
uv = gl_TexCoord[0].xy;
}
gl_FragColor = texture2D(colorMap, uv );
}