WebGL - 清空 canvas 绘图区域(颜色缓存区)

本文介绍了WebGL中如何操作canvas的坐标系统和清空绘图区域。首先,讲解了canvas的像素坐标系统和创建512像素宽高的canvas。接着,获取WebGL绘图上下文对象,用于绘制三维图形。然后,通过gl.clearColor()方法设定清空区域的背景颜色,并使用gl.clear()方法清除canvas上的内容。最后,提供了一个示例地址供参考。

1、canvas 的坐标系统

在这里插入图片描述

canvas坐标系统横轴是x轴,纵轴是y轴,原点是在左上角,绘图区域是指定的widthheight单位是 像素

注意:绘制三维图形的单位也是 像素

2、创建一个宽高512的canvas

<canvas id="webgl" width="512" height="512"></canvas>

3、获取 webgl 绘图上下文对象

var canvas = document.getElementById('webgl')// 获取 WebGL 上下文对象
var gl = getwebGLContext(canvas)

上面获取webgl上下文对象的方法,是为了浏览器的兼容性处理,经过封装后( 具体代码获取方法查看第一篇文章 ),你也可以直接通过下面的代码来获取webgl上下文对象

var gl = canvas.getContext('webgl');

这种方法,和获取2d绘图上下文对象类似,传递的参数不一样

var ctx - canvas.getContext('2d')

ctx上下文对象只能绘制二维图像,而这里的gl上下文对象可以绘制三维图形,你可以console.log(gl)看该对象上面挂载的属性和方法

4、gl.clearColor()方法指定颜色

这个方法挂载在刚才获取的 gl对象上(或者对象的原型上),清空绘图区域之前需要指定背景颜色,就像使用2d绘制矩形的时候,需要指定绘制的颜色一样

清空绘图区域 也就是指定canvas的背景色

方法名返回值参数
gl.clearColor(r, g, b, a)(r,g,b,a)是颜色值和透明度,范围是(0.0 - 1.0),超出范围泽截断为最值

注意:一旦指定了背景色之后,背景色就会贮存在 webgl系统中,在下一次调用 gl.clearColor()前不会改变,若要用同一个颜色再次清空以下绘图区域,泽没必要再次指定以下背景色

5、清空 canvas

使用gl.clear()方法,来用刚才指定的颜色,清空绘图区域(清空颜色缓冲区),也就是用背景色填充,擦出已经绘制的内容。

gl.clear()方法

将指定缓冲区设置为预设的值,如果清空的是颜色缓冲区,那么需要使用gl.clearColor()来指定预定的颜色值

方法名参数返回值
gl.clear(buffer)gl.COLOR_BUFFER_BIT(颜色缓存)、gl.DEFTH_BUFFER_BIT(深度缓冲区)、gl.STENCIL_BUFFER_BIT(模板缓冲区)

注意:如果没有指定颜色,也就是没有调用gl.clearColor(),泽颜色缓存区使用默认的值,(0.0, 0.0, 0.0 ,0.0)

具体三个缓存区默认值如下

名称默认值方法名
颜色缓存区(0.0, 0.0, 0.0, 0.0)gl.clearColor(r, g, b, a)
深度缓冲区1.0gl.clearDepth(depth)
模板缓冲区0gl.clearStencil(s)

具体示例代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Clear canvas</title>
    <link rel="stylesheet" href="../css/common.css">
</head>

<body>
    <canvas id="webgl" width="512" height="512"></canvas>
</body>
<script src="../lib/webgl-utils.js"></script>
<script src="../lib/webgl-debug.js"></script>
<script src="../lib/cuon-utils.js"></script>
<script>

    (function () {

        var canvas = document.getElementById('webgl');

        /* 获取 WebGL上下问对象*/
        var gl = getWebGLContext(canvas);

        if (!gl) {
            console.log('获取webgl上下文对象失败');
        }

        // var gl2 = canvas.getContext('webgl');

        // console.log(gl);
        // console.log(gl2);

        /* 指定清空canvas 的颜色 */
        gl.clearColor(0.0, 0.5, 0.5, 1.0);

        /* 清空 canvas 绘图区域*/
        gl.clear(gl.COLOR_BUFFER_BIT);

    })();


</script>

</html>

示例地址

清空canvas绘图区域

### WebGLCanvas 的差异 WebGLCanvas 是两种用于在网页上进行图形渲染的技术,它们各自有不同的特点和适用场景。 WebGL 是基于 OpenGL ES 2.0 的一种 3D 绘图协议,它允许在支持的浏览器中直接使用 GPU 加速来渲染复杂的 3D 图形。WebGL 的坐标系统限制在 (-1, -1, -1)(1, 1, 1) 的立方体内,这意味着任何超出这个范围的图形都不会被显示出来[^3]。 Canvas 则是一个二维绘图 API,它提供了在网页上绘制图形的基本功能,包括路径、矩形、圆形等形状,以及文本和图像的合成。Canvas 本身并不直接支持硬件加速,但它可以通过软件渲染来实现高性能的 2D 图形处理。 ### 使用场景 WebGL 更适合需要高性能 3D 渲染的应用场景,例如游戏开发、虚拟现实体验、科学可视化等。由于 WebGL 利用了 GPU 加速,因此它可以处理大量的图形数据并实时渲染复杂的场景。 Canvas 则更适合于简单的 2D 图形渲染,如图表、动画、游戏等。Canvas 的优势在于其简单性和广泛的浏览器支持,尽管它缺乏 WebGL 的硬件加速能力,但对于不需要复杂 3D 效果的应用来说已经足够。 ### 在 Web 开发中的应用 WebGL 在 Web 开发中的应用主要集中在需要高性能图形渲染的领域。例如,在游戏开发中,WebGL 可以用来创建高质量的 3D 游戏;在虚拟现实应用中,WebGL 可以用来渲染沉浸式的 3D 场景;在科学可视化中,WebGL 可以用来展示复杂的数据集。 Canvas 在 Web 开发中的应用则更加广泛,尤其是在需要简单 2D 图形渲染的地方。例如,在数据可视化中,Canvas 可以用来创建动态图表;在教育应用中,Canvas 可以用来制作交互式的学习材料;在用户界面设计中,Canvas 可以用来实现自定义的 UI 元素。 ### WebGL 上下文创建错误处理 当用户代理需要在 canvas 上触发 WebGL 上下文创建错误时,它必须执行一系列步骤,包括在 canvas 上触发名为 "webglcontextcreationerror" 的 WebGL 上下文事件,并可选地设置其 statusMessage 属性为一个平台相关的字符串,描述失败的本质[^2]。 ### 示例代码 下面是一个简单的 WebGL 初始化代码示例: ```javascript // 获取 canvas 元素 var canvas = document.getElementById('myCanvas'); // 尝试获取 WebGL 上下文 var gl = canvas.getContext('webgl'); if (!gl) { console.log('无法初始化 WebGL'); } else { // 设置清空颜色为黑色 gl.clearColor(0.0, 0.0, 0.0, 1.0); // 清空颜色缓冲区 gl.clear(gl.COLOR_BUFFER_BIT); } ``` 而对于 Canvas,下面是一个简单的绘制矩形的例子: ```javascript // 获取 canvas 元素 var canvas = document.getElementById('myCanvas'); var ctx = canvas.getContext('2d'); // 绘制一个红色的矩形 ctx.fillStyle = 'red'; ctx.fillRect(10, 10, 100, 100); ``` ### 重置样式库 在使用 CSS 之前,可能需要对一些 HTML 标签进行标准化处理,以确保一致的外观。推荐使用的重置或标准化 CSS 库包括 Normalize、MiniRest.css、sanitize.css 和 unstyle.css[^4]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值