当前位置: 首页 > news >正文

glsl着色器学习(九)屏幕像素空间和设置颜色

在上一篇文章中,使用的是裁剪空间进行绘制,这篇文章使用屏幕像素空间的坐标进行绘制。

上一篇的顶点着色器大概是这样子的

回归一下顶点着色的主要任务:

  •  通常情况下,顶点着色器会进行一系列的矩阵变换操作,将输入的顶点坐标从模型空间依次经过世界空间,视图空间,最终转换到裁剪空间。

将顶点着色器改成下面这样:

 <script id="vertex-shader-2d" type="x-shader/x-vertex">// 获取顶点attribute vec2 a_position;// 获取画布宽高uniform vec2 u_resolution;void main() {// 把像素坐标转换到0-1vec2 zeroToOne = a_position / u_resolution ;// 先转换成0-2 再减去1最终变成-1 - 1(裁剪空间)vec2 clipSpace = zeroToOne * 2.0 - 1.0;// 乘以vec2(1,-1)是将Y轴坐标交换gl_Position = vec4(clipSpace * vec2(1,-1),1.0,1.0);}</script>

 从着色器程序中获取u_resolution的位置

const resolutionUniformLocation = gl.getUniformLocation(program, 'u_resolution');

设置resolution值

gl.uniform2f(resolutionUniformLocation, gl.canvas.width, gl.canvas.height);

再改变一下postions三个顶点的值,因为绘制二维图形,所以只需要3组共6个顶点

  const positions = [200, 200, 250, 350, 350, 250];

运行Study.html。得到如图所示,如果改变颜色下面讲解

改变颜色:

改变颜色需要修改片元着色器

片段着色器主要作用:

  • 核心作用是为每个片元(预备像素)确定颜色。
<script id="fragment-shader-2d" type="x-shader/x-fragment">precision mediump float;// 定义一个统一变量的u_color,用来接收应用程序传递的四维向量颜色属性uniform vec4 u_color;void main() {gl_FragColor = u_color;}</script>

找到u_color在着色器程序中的位置

const colorUniformLocation = gl.getUniformLocation(program, 'u_color');

设置颜色值,这里才用随机值产生颜色R/G/B/A四个分量

gl.uniform4f(colorUniformLocation, Math.random(), Math.random(), Math.random(), Math.random());

运行Study.html,不出意外,每次刷新页面,都会出现不同的颜色。

撒花!!!

http://www.lryc.cn/news/431158.html

相关文章:

  • 前端框架有哪些?
  • 分类预测|基于黑翅鸢优化轻量级梯度提升机算法数据预测Matlab程序BKA-LightGBM多特征输入多类别输出 含对比
  • 利用大模型实时提取和检索多模态数据探索-利用 Indexify 进行文档分析
  • 函数式接口实现策略模式
  • 鸿蒙Next-拉起支付宝的三种方式——教程
  • Vue.js 组件化开发:父子组件通信与组件注册详解
  • 【HTTP、Web常用协议等等】前端八股文面试题
  • Datawhale x李宏毅苹果书AI夏令营深度学习详解进阶Task03
  • 【机器学习】任务三:基于逻辑回归与线性回归的鸢尾花分类与波士顿房价预测分析
  • 【操作系统存储篇】Linux文件基本操作
  • C++ | Leetcode C++题解之第387题字符串中的第一个唯一字符
  • 数学建模--皮尔逊相关系数、斯皮尔曼相关系数
  • DAY87 APP 攻防-安卓逆向篇Smail 语法反编译签名重打包Activity 周期Hook 模块
  • jenkins 工具使用
  • 使用C语言实现字符推箱子游戏
  • 用SpringBoot API实现识别pdf文件是否含有表格
  • 嵌入式S3C2440:控制LED灯
  • 算法:区间dp
  • 【14.1运行版】C++俄罗斯方块-实现欢迎界面
  • 数据分析:R语言计算XGBoost线性回归模型的SHAP值
  • SprinBoot+Vue图书馆预约与占座微信小程序的设计与实现
  • 云计算之大数据(上)
  • 交友系统“陌陌”全方位解析
  • Android 删除开机动画
  • 我用 GPT 学占星
  • 028、架构_高可用_主从原理
  • 【启明智显技术分享】探讨CAN总线相关知识以及Model3C 2路CAN的应用
  • 【python学习】深度解析 Python 的 .env配置与最佳实践:温格高的环境变量配置之道
  • 计算机考研真题知识点——2021(B)
  • C#中ArrayList