(一)如何根据rgba刷成webgl的底色

简介: (一)如何根据rgba刷成webgl的底色

问题


如何根据rgba刷成webgl的底色?


思路


rgba的格式为: rgba(1,1,0,1),可以根据正则,取出括号里面的每一个数字,再进行自己的逻辑处理(只取出不处理也可以),然后实用webgl的.gl.clearColor(r, g, b, a)写入进去。


示例代码


硬编码写入


```html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>01-刷底色</title>
    <style>
      body {
        margin: 0;
        overflow: hidden;
      }
      #canvas {
        background-color: antiquewhite;
      }
    </style>
  </head>
  <body>
    <canvas id="canvas"></canvas>
    <script>
      const canvas = document.querySelector("#canvas");
      canvas.width = window.innerWidth;
      canvas.height = window.innerHeight;
      //二维画笔
      // const gl=canvas.getContext('2d');
      //三维画笔
      const gl = canvas.getContext("webgl");
      //声明颜色 rgba
      gl.clearColor(1, 1, 0, 1);
      //刷底色
      gl.clear(gl.COLOR_BUFFER_BIT);
    </script>
  </body>
</html>


效果:

1dc618a0ed9580ce8bfa6facb208c08f.png


根据rgba写入


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>01-刷底色</title>
    <style>
      body {
        margin: 0;
        overflow: hidden;
      }
      #canvas {
        background-color: antiquewhite;
      }
    </style>
  </head>
  <body>
    <canvas id="canvas"></canvas>
    <script>
      const canvas = document.querySelector("#canvas");
      canvas.width = window.innerWidth;
      canvas.height = window.innerHeight;
      //二维画笔
      // const gl=canvas.getContext('2d');
      //三维画笔
      const gl = canvas.getContext("webgl");
      //声明颜色 rgba
      gl.clearColor(1, 1, 0, 1);
      //刷底色
      gl.clear(gl.COLOR_BUFFER_BIT);
      //css颜色
      const rgbaCss = "rgba(255,100,0,1)";
      //正则
      const reg = RegExp(/\((.*)\)/);
      //捕捉数据
      const rgbaStr = reg.exec(rgbaCss)[1];
      console.log(rgbaStr);
      //加工数据
      const rgba = rgbaStr.split(",").map((n) => parseInt(n));
      console.log(rgba);
      const r = rgba[0] / 255;
      const g = rgba[1] / 255;
      const b = rgba[2] / 255;
      const a = rgba[3];
      //声明颜色 rgba
      gl.clearColor(r, g, b, a);
      //刷底色
      gl.clear(gl.COLOR_BUFFER_BIT);
    </script>
  </body>
</html>

效果:

5d4c6812c8535adbb050f4ddf2e1bce8.png

相关文章
|
6月前
(一)如何根据rgba刷成webgl的底色
(一)如何根据rgba刷成webgl的底色
|
存储 编解码 缓存
webgl系列之抗锯齿和深度缓存
前言 大家好我是Fly 哥, 这是今年webgl 系列的第三篇文章, 如果你之前的两篇文章没看的话,建议先看一下,然后再来看这一篇文章 Webgl 系列之buffer的使用 webgl系列之对光栅化的理解 上一篇文章,任何虚拟3维世界的转换到二维屏幕中通过「采样」 也就判断屏幕上的每个像素中心点是不是在三角形内部的得到了 下面这幅图: 图片 走样之前 这时候有同学问, 这不像三角形哇, 这个其实用个专业的词—— 「锯齿」 , 我的理解 一个三角形经过光栅化后, 得到屏幕上每一个像素点 组成的像素点的集合。那到底是经过什么样的处理得到下面这张图: 图片 final 反走样 其实出现上面
webgl系列之抗锯齿和深度缓存
|
4月前
|
前端开发
|
5月前
|
前端开发
canvas图像阴影处理
canvas图像阴影处理
|
6月前
添加渐变色
添加渐变色
36 0
|
6月前
一行代码获取rgba颜色色值的透明度
一行代码获取rgba颜色色值的透明度
|
前端开发
SVG 线性渐变 和 径向渐变
SVG 线性渐变 和 径向渐变
206 0
|
前端开发
css:border-radius绘制边框圆角-全圆和椭圆
css:border-radius绘制边框圆角-全圆和椭圆
141 0
css:border-radius绘制边框圆角-全圆和椭圆
|
前端开发
canvas渐变
canvas渐变
122 1
canvas渐变