先看看效果
ShadertoyLearning-1
完整代码
ShaderToy是一个跨浏览器的在线社区,支持在线编写GLES脚本,把下面的代码复制到ShaderToy网站上,可以看到运行效果。
float wrap(float x) {
return abs(mod(x, 2.) - 1.);
}
float sdPlane(vec3 p)
{
return p.y;
}
float sdSphere(vec3 p, float s)
{
return length(p) - s;
}
float sdCappedTorus(in vec3 p, in vec2 sc, in float ra, in float rb)
{
p.x = abs(p.x);
float k = sc.y*p.x > sc.x * p.y ? dot(p.xy, sc) : length(p.xy);
return sqrt(dot(p,p) + ra * ra - 2.0 * ra*k ) - rb;
}
vec3 rot_around_x(vec3 point, float cosangle, float sinangle)
{
return vec3(point.x,
point.y * cosangle - point.z * sinangle,
point.y * sinangle + point.z * cosangle);
}
vec3 rot_around_y( vec3 point, float cosangle, float sinangle )
{
return vec3(point.x * cosangle + point.z * sinangle,
point.y,
point.x * -sinangle + point.z * cosangle);
}
vec3 rot_around_z(vec3 point, float cosangle, float sinangle)
{
return vec3(point.x * cosangle - point.y * sinangle,
point.x * sinangle + point.y * cosangle,
point.z);
}
//----------------------------------------------------------------------
vec2 opU(vec2 d1, vec2 d2)
{
return (d1.x < d2.x) ? d1 : d2;
}
vec3 opRep(vec3 p, vec3 c)
{
vec3 temp = vec3(0., 0., 0.);
if(c != temp) {
temp = mod(p, c) - 0.5 * c;
}
return temp;
}
//----------------------------------------------------------------------
float repeatX = 1.5;
float repeatY = 0.0;
float repeatZ = 1.5;
//----------------------------------------------------------------------
vec2 map