首页 > 其他分享 >shadertoy学习 第3课

shadertoy学习 第3课

时间:2023-03-08 17:44:06浏览次数:35  
标签:shadertoy float uv 学习 abs vec2 vec3 col


注意下面的segment函数,计算了uv点到直线的距离,小于width就是白色


//封装绘制网格函数

vec3 grid(vec2 uv)

{

vec2 cell = fract(uv);//取小数部分

vec3 col=vec3(0.);

//网格绘制

if(abs(cell.y)<fwidth(uv.y)) //横坐标绘制,小于一个像素,就是红色

    {

        col.r=1.0;

    }

if(abs(cell.x)<fwidth(uv.x)) //纵坐标绘制,小于一个像素,就是蓝色

    {

        col.b=1.0;

    }

//x y 坐标轴绘制

if(abs(uv.y)<fwidth(uv.y)) //横坐标绘制

    {

        col=vec3(1,1,1);

    }

if(abs(uv.x)<fwidth(uv.x)) //纵坐标绘制

    {

        col=vec3(1,1,1);

    }

return col;

}

//坐标归一化

vec2 fixUV(in vec2 uv, in float scale)

{

return scale*(2.0*uv-iResolution.xy)/min(iResolution.x,iResolution.y);

}

// 用向量计算点到直线距离,小于width就认为在这个直线上

float segment(in vec2 uv, in vec2 p0, in vec2 p1, float width)

{

vec2 a = uv - p0;

vec2 b = p1 - p0;

vec2 c = dot(a, b)/dot(b,b)*b;

vec2 e = c - a;

float d = length(e);

if(d<width)

return 1.;

else

return 0.;

}

void mainImage( out vec4 fragColor, in vec2 fragCoord )

{

// 3x3大小的坐标

vec2 uv = fixUV(fragCoord, 3.0);

// Output to screen

// fragColor = vec4(grid(uv), 1.0);

vec3 color = vec3( segment(uv, vec2(0., 0.), vec2(1., 1.), 0.01));

    fragColor = vec4(color, 1.0);

}


image




画线段,clamp怎么理解???


//封装绘制网格函数

vec3 grid(vec2 uv)

{

vec2 cell = fract(uv);//取小数部分

vec3 col=vec3(0.);

//网格绘制

if(abs(cell.y)<fwidth(uv.y)) //横坐标绘制,小于一个像素,就是红色

    {

        col.r=1.0;

    }

if(abs(cell.x)<fwidth(uv.x)) //纵坐标绘制,小于一个像素,就是蓝色

    {

        col.b=1.0;

    }

//x y 坐标轴绘制

if(abs(uv.y)<fwidth(uv.y)) //横坐标绘制

    {

        col=vec3(1,1,1);

    }

if(abs(uv.x)<fwidth(uv.x)) //纵坐标绘制

    {

        col=vec3(1,1,1);

    }

return col;

}

//坐标归一化

vec2 fixUV(in vec2 uv, in float scale)

{

return scale*(2.0*uv-iResolution.xy)/min(iResolution.x,iResolution.y);

}

// 用向量计算点到直线距离,小于width就认为在这个直线上

float segment(in vec2 uv, in vec2 p0, in vec2 p1, float width)

{

vec2 a = uv - p0;

vec2 b = p1 - p0;

vec2 c = clamp(dot(a, b)/dot(b,b), 0., 1.)*b;

vec2 e = c - a;

float d = length(e);

if(d<width)

return 1.;

else

return 0.;

}

void mainImage( out vec4 fragColor, in vec2 fragCoord )

{

// 3x3大小的坐标

vec2 uv = fixUV(fragCoord, 3.0);

// Output to screen

vec3 color = grid(uv);

    color += vec3( segment(uv, vec2(0., 0.), vec2(1., 2.), fwidth(uv.x)));

    fragColor = vec4(color, 1.0);

}

标签:shadertoy,float,uv,学习,abs,vec2,vec3,col
From: https://www.cnblogs.com/cute/p/17195497.html

相关文章

  • Excel基础学习笔记
    EXCEL快速填充:CTRL+E帮你合并拆分内容想用快速填充附近一定要有数据 快速分析数据:选中目标区域后直接CTRL+Q快速分析能实现多种效果:格式化、图标、汇总、表格、迷......
  • 跟着思兼学习Klipper(22)稳中求胜: 工业级的 Fysetc Spider King 简要观察记录
    稳中求胜:工业级的FysetcSpiderKing简要观察记录前言本文感谢富源盛(Fysetc)赞助的SpiderKing主板。最初接触8轴主板就是当时买的mksmonster8v1和三叉戟自带......
  • 如何轻松学习网页设计和网页编程?
    学习网页设计和网络编程可能是一种有趣而有意义的体验,但需要时间,精力和练习.这里有一些技巧可以帮助您更轻松地学习这些技能:从基础知识开始:在您深入研究高级主题之前,重......
  • 如何学习MySQL,这几本书初学者必看!
    《高性能MySQL》第四版发布后,收到了很多读者的反馈,其中关注最多的是作为一个初学者,应该如何能够较为系统的学习MySQL,从而应对日常工作或者获得更好的职业发展。于是和多个......
  • Linux & 标准C语言学习 <DAY9_1>
    //补08_2函数  2、函数传参:    1.函数中定义的变量属于该函数,出了该函数就不能再被别的函数直接使用    2.实参与形参之间是以赋值的方式进行......
  • python学习-第三方库综合程序设计实验报告
    目录实验四: Python综合程序设计实验名称:Python综合程序设计              指导教师:      实验日期:2022年 12 月 5 日......
  • 还有必要学习Zuul么?网关的三大功能;统一入口,统一认证,请求路由转发
    还有必要学习Zuul么? 一、什么是API网关在开始讲解SpringCloudGateWay之前呢,有必要说明一下什么是API网关。网关这个词,最早是出现在网络设备中,比如在彼此隔离的两......
  • Python学习笔记:str.zfill补全位数
    一、介绍zfill函数用于在字符串的开头添加零,直到达到指定的长度。如果len参数的值小于字符串的长度,则不执行填充。具体使用语法为:str.zfill(len)如果是整型、浮点......
  • (总结三)Linux指令学习——逻辑卷管理
    文章目录​​1.LVM概述​​​​2.LVM的管理命令​​​​3.使用命令行工具实现LVM存储​​​​4.扩展逻辑卷和ext4文件系统​​​​5.减少逻辑卷和文件系统​​​​6.扩大和......
  • asp .net 学习网站
    学习netcore思路:1.首先,了解.NETCore的基本概念,学习.NETCore的文档,以及它和.NETFramework的区别;2.学习.NETCore的构建工具,如MSBuild,NuGet,NPM,Bower等;3.学习.NETCore的......