tiny planet shader

来源:互联网 发布:深圳蜂窝网络是培训 编辑:程序博客网 时间:2024/06/09 23:47
#version 430 coreprecision mediump float;uniform sampler2D texture;uniform float scale, aspect, time;uniform mat3 transform;varying vec2 v_texcoord;#define PI 3.141592653589793void main(){  vec2 rads = vec2(PI * 2., PI);  vec2 pnt = (v_texcoord - .5) * vec2(12.0, 12.0* 0.5);  // Project to Sphere  float x2y2 = pnt.x * pnt.x + pnt.y * pnt.y;  vec3 sphere_pnt = vec3(2. * pnt, x2y2 - 1.) / (x2y2 + 1.);  sphere_pnt *= transform;  // Convert to Spherical Coordinates  float r = length(sphere_pnt);  float lon = atan(sphere_pnt.y, sphere_pnt.x)+ PI;  float lat = acos(sphere_pnt.z / r);  gl_FragColor = texture2D(texture, vec2(lon, lat) / rads);}
在shader中 arctan 很容易出问题 通过加减pi可以调节到正常范围
0 0
原创粉丝点击