首页 > 其他分享 >GLSL shader学习系列2-画个圆

GLSL shader学习系列2-画个圆

时间:2023-03-08 12:04:24浏览次数:31  
标签:GLSL float shader vec4 vec2 step 画个 gl

这是GLSL shader学习系列的第二篇文章,本文中我们将会学习如何使用shader绘制一个圆形。

引子
上一篇文章的内容比较简单易懂,由于gl_FragCoord能够表示每个像素点在画布中的坐标,因此很容易就能通过归一化得到连续渐变的效果。那么,如何使用着色器画出用明显边界感的圆形呢?这里需要使用到step函数,其功能类似一个过滤器,将大于阈值的数值设置为1,小于阈值的数值设置为0。看下面的示例代码:

#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 u_resolution;

void main() {
vec2 st = gl_FragCoord.xy / u_resolution;

// 如果st.x的值小于等于0.5, stepX的取值为0,否则为1
float stepX = step(0.5, st.x);

// gl_FragColor的取值可能为vec4(0., 0., 0., 1.)或vec4(1.,0.,0.,1.)
gl_FragColor=vec4(stepX, 0., 0.0, 1.0);
}

借助step,我们已经能够绘制出界限分明的图像了!

画一个圆
除了step函数,还需要使用到length函数才能绘制出一个圆(更多的shader函数可以阅读这篇博客)。length函数返回向量的长度,如length(vec2(1,0))的计算结果为1。

到这里,如果你有小学数学基础,应该就已经能够画出一个圆了,不多解释:

#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 u_resolution;

void main(){
// 减去0.5是为了让圆心在画布中央
vec2 st=gl_FragCoord.xy/u_resolution - 0.5;

// 计算任何一个像素点距离原点坐标的距离
float r = length(st);
float s = step(.4, r);

// gl_FragColor的取值可能为vec4(0., 0., 0., 1.)或vec4(1.,1.,1.,1.)
gl_FragColor=vec4(s, s, s, 1.);
}

 

 


原文链接:https://blog.csdn.net/qq_26822029/article/details/129252404

 

标签:GLSL,float,shader,vec4,vec2,step,画个,gl
From: https://www.cnblogs.com/im18620660608/p/17191516.html

相关文章

  • 三大 Shader 编程语言(CG/HLSL/GLSL)
    什么是ShaderLanguageShaderLanguage的发展方向是设计出在便携性方面可以和C++、Java等相比的高级语言,“赋予程序员灵活而方便的编程方式”,并“尽可能的控制渲染过程”......
  • shadertoy学习 第2课
    坐标系统绘制与fwidth函数voidmainImage(outvec4fragColor,invec2fragCoord){//Normalizedpixelcoordinates(from-1to1)vec2uv=(2.0*fragCoord-iResolut......
  • # shader——无限循环背景的制作
    制作前准备需求要求UI中的一张图片需要无限制的斜向移动。图片设置准备开始制作首先我们需要一个mainTexture的参数和调节速度的参数,所以我们在Properties块中......
  • shadertoy学习 第一课
    一、坐标归一化voidmainImage(outvec4fragColor,invec2fragCoord){   //Normalizedpixelcoordinates(from0to1)    vec2uv=fragCoord/iResolut......
  • Shader入门精要笔记 - CH10.1_环境映射之折射
    折射:光线从一种介质进入另一种介质,传播方向会发生改变  Cubemap是在Teapot_Refract的位置拍摄的Shader"My/Tex2/RefractCubeMap"{Properties{......
  • Unity URP Shader 基础光照
    函数GetMainLight()返回一个数据结构LightstructLight{half3direction;//颜色&强度half3color;//方向halfdistanceAttenuation;//距......
  • Direct3D Compute Shader基础
    从DirectX11.0版本(即SM5.0,需win7及以上)开始,引入ComputeShader(计算着色器)来进行GPU编程。ComputeShader不属于图形渲染管线的一个步骤,使得开发者可以脱离图形渲染管线的......
  • threejs shader特效,分区辉光
    分区辉光有两种实现方式:1.单个图层两次渲染,先用带bloom的composer渲染一次,再正常渲染一次:https://github.com/mrdoob/three.js/blob/master/examples/webgl_postprocessin......
  • Unity Shader标准光照模型的实现
    1Shader"Custom/P_Illumination"2{3Properties{4_BasicColor("基础颜色",Color)=(1.0,1.0,1.0,1.0)5_SpecularColor("高光颜色",Colo......
  • 修改物体材质的shader以及修改shader内对应 比如颜色 修改
          例如这个shader 他里面就两个参数他这个maincolor 对应的修改内容是_Color  ......