webgl 01 入门
webgl 01 入门
hellow world
一个最简单的 canvas 实例
1 | const ctx = document.getElementById('canvas') |
一个最简单的 webgl 实例
1 | const ctx = document.getElementById('canvas') |
着色器
着色器就是让开发者自己去编写一段程序,用来代替固定渲染管线,来处理图像的渲染。2d 的渲染比较简单,3d 的渲染需要着色器的帮助。
---
title: 顶点着色器
title: 顶点着色器
flowchart LR
顶点着色器-- 用来描述顶点的特性 -->通过计算获取位置信息
顶点是指⼆维三维空间中的⼀个点,可以理解为一个个坐标。
--- title: 片元着色器 --- flowchart LR 片元着色器-- 进行逐片元处理程序 -->通过计算获取颜色信息
片元可以理解为一个个像素。
特点
- 区分大小写
- 结尾;必须
- 入口 main 函数
- 强语言类型
- 不能以 gl_, webgl_开头
工作流程
JavaScript 读取相关着色器信息,传递给 webgl 并进行使用
flowchart TB
subgraph 浏览器
渲染成功
end
subgraph WebGL程序
subgraph 片元着色器
颜色
end
subgraph 顶点着色器
坐标系
end
end
subgraph JavaScript程序
着色器源码
end
JavaScript程序 --> WebGL程序
WebGL程序 --> 浏览器
flowchart TB
subgraph 初始化着色器Shader
direction LR
创建顶点着色器 --> 创建片元着色器 --> 关联着色器和着色器源码 --> 编译着色器 --> 创建program --> 关联着色器和program --> 使用program
end
开始 --> 获得canvas元素 --> 获取WebGL绘图上下文 --> 初始化顶点着色器源程序 --> 初始化片元着色器源程序
初始化片元着色器源程序 --> 创建顶点着色器
使用program --> 绘图渲染
DEMO
1 | const ctx = document.getElementById('canvas') |
坐标系
!330
与 canvas 的坐标系不同
webgl三维坐标系类似下图
!344
!391
有个左手坐标系和右手坐标系的争论
通过attribute变量绘制一个点
声明 attribute 变量
| 存储限定符 | 类型 | 变量名 | 分号 |
|---|---|---|---|
| attribute | vec4 | aPosition | ; |
| attribute 变量只能在顶点着色器中使用,不能在片元着色器中使用 |