OpenGLSL学习:基于ShaderToy制作一个表情场景

先看看效果

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值