shader着色器

数学

齐次坐标:点p=a+b+c+o(原点),向量p=a+b+c,所以向量的其次坐标(a,b,c,0),点(a,b,c,n)
其次坐标变换,n>1放大,n<1缩小
对称变换

| -1 0 0 0 |
| 0 1 1 0 |
| 0 0 1 0 |
| 0 0 0 1 |

参考:齐次坐标变换_走过_冬天的博客-CSDN博客_齐次坐标变换

四元数:(x,y,z,w),(x,y,z)表示向量,w表示旋转角度,
四元数q1*q2叉乘:

(w1w2 - x1x2 - y1y2 - z1z2) +
(w1x2 + x1w2 + y1z2 - z1y2) i +
(w1y2 - x1z2 + y1w2 + z1x2) j +
(w1z2 + x1y2 - y1x2 + z1w2) k

参考:四元数基础 - 圣骑士wind - 博客园

glsl

顶点shader(负责数据)和片段shader(负责颜色控制,没有顶点shader也可以直接控制颜色绘图如shadertoy上面的例子)
attribute顶点相关,uniform顶点无关数据,varying顶点和片段之间传递数据
变量前加highp、mediump、lowp精度声明
vec4:rgba、顶点坐标(齐次坐标)、xy成员返回vec2,xyz成员返回vec3
vec3:法线坐标(顶点所在面的法线)、
vec2:纹理坐标
sampler2D:访问二维纹理
raymarch:光线步进(3dmax中的射线检测)
sdf:符号距离函数,物体外部点值>0,物体内部点值<0,物体表面上的点==0

  • 顶点缓冲区Vetex Buffer,存储点数据
  • 索引缓冲区Index Buffer,存储顶点缓冲去的索引数据,减少数据重复,索引缓冲区存储的面或者空间数据
  • GRADIENT_TRIANGLE、GRADIENT_RECT顶点数据,按照如下格式存储
  • Bitmap,24位以上不包含调色板,24位以下包含调色板

法线坐标参考:OpenGL中求顶点的法线_GIS_Tracker的博客-CSDN博客_顶点法线

shader运行

shader在以下框架中加载运行

  • opengl,webgl

opengl使用glsl语法,开发shader,shader在glCreateProgram中运行,最终渲染出图像数据,通过swapwindow交换后台渲染数据和窗口显示

  • directx

directx使用hlsl语法,windows专用

  • vulkan,webgpu

opengl的升级版本,渲染效率比window更高,shader需要在renderpieline、copmutepipline管线中运行

gpu渲染通过shader程序执行,vetex和fragment的程序差别大,cpu程序中更容易开发架构
参考:
https://blog.csdn.net/g11d111/article/details/108189198
https://gitee.com/Morphlng/ray-tracing.git 光线追踪cpu实现

shader toy(webgl使用glsl规范)

vscode shader toy 插件
学习的网站:
Shader 绘制基础图形 - 掘金
Shadertoy BETA
The Book of Shaders: Shaping functions

一个简单的demo,shader输入顶点渲染器中的点向量,输出也是点向量,shader实际是一个点到点的函数计算公式算法,gpu循环异步循环所有点,套用shader公式计算输出

vec4 line(vec2 pos,vec2 p1,vec2 p2,float width){
    float k = (p1.y - p2.y)/(p1.x - p2.x);    
    float b = p1.y - k * p1.x;
    float t = distance(vec2(pos.x,k*pos.x+b),pos);    //带锯齿的算法,可以使用点到直线公式画出无锯齿的直线
    if(t<width)
        return vec4(0,0,0,1);
    else
        return vec4(1,1,1,1);
}
void main(){
    vec2 uv = gl_FragCoord.xy/iResolution.xy;
    gl_FragColor = line(uv,vec2(.0,.0),vec2(.3,.4),.01);
}

vscode中shadertoy插件显示如下
在这里插入图片描述

shader editor(goole插件或者网页)

Shdr Editor

shader-scholl

cnpm install -g shader-school 运行shader-school命令

geeks3d

Shader Library (GLSL) | Geeks3D

glsl参考

GLSL 基础量定义 - 3D入魔 - 博客园

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪力左手

囧rz

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值