ShaderToy的使用方法

本文记录了一名初学者在ShaderToy上的学习过程,从理解基本的屏幕坐标、纹理坐标归一化,到尝试绘制圆和实现简单动画,再到探索帧缓存的应用。尽管面临困难,作者依然坚持自我学习,希望通过不断实践逐渐掌握图形编程。

这个网站,之前是知道的,这个网站上有很多好看的例子,也是知道的,比如:

Path Tracer Denoise (shadertoy.com)

 Ray tracing spheres (shadertoy.com)

但是,我是小白,知道了也理解不了;学了也不一定能学会,学会了也会被同行碾压。

但是,本着自我感动式学习的想法,还是象征性的学一学吧。

参考:

渲染技术 - 知乎 (zhihu.com)

网站界面介绍

大概就是这样

代码是这些:

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    // 这个uv,不是归一化的形式,需要手动归一化纹理坐标到[0-1]范围
    vec2 uv = fragCoord/iResolution.xy;
    // 根据时间变量iTime与纹理坐标组合作为入参计算像素颜色
    vec3 col = 0.5 + 0.5*cos(iTime+uv.xyx+vec3(0,2,4));
    // 输出颜色到fragColor,只需要给该变量赋值就可以展示在最终渲染效果上
    fragColor = vec4(col,1.0);
}

屏幕坐标系

它的屏幕坐标系,是什么样的?

试试

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = fragCoord/iResolution.xy;
    vec3 col = vec3(0,0,0);
    if(uv.x<0.5 && uv.y<0.5)//左下设置为红色
        col = vec3(1.0,0.0,0.0);
    else if(uv.x>0.5 && uv.y<0.5)//右下设置为绿色
        col = vec3(0.0,1.0,0.0);
    else if(uv.x<0.5 &&uv.y>0.5)//左上设置为蓝色
        col = vec3(0.0,0.0,1.0);
    else if(uv.x>0.5 && uv.y>0.5)//右上设置为黄色
        col = vec3(1.0,1.0,0.0);
    fragColor = vec4(col,1.0);
}

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值