#version 430 core
precision mediump float;
uniform sampler2D texture;
uniform float scale, aspect, time;
uniform mat3 transform;
varying vec2 v_texcoord;
#define PI 3.141592653589793
void 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可以调节到正常范围
tiny planet shader
最新推荐文章于 2020-12-30 21:44:12 发布