《WebGL编程指南》学习笔记——2.使用< canvas >元素

上一节初步认识了WebGL,这一小节我们来开始学习使用< canvas >元素绘制二维图形

  • WebGL编程指南学习笔记2使用 canvas 元素

    • 认识 canvas 标签
    • 使用 canvas 标签
    • HelloCanvas2d实例
      • 获取 canvas 元素
      • 通过元素来获取二维图形的绘图上下文
      • 绘制二维图形

下小节我们正式开始学习如何在< canvas >中使用WebGL


WebGL采用HTML5中新引入的元素,它定义了网页上的绘图区域,如果没有WebGL,JS只能在上绘制二维图形,有了WebGL,就可以在上面绘制三维图形了。

认识< canvas >标签

  HTML5出现以前,如果你想在网页上显示图像,只能使用HTML提供的原生方案标签。用这个标签显示图像虽然简单,但只能显示静态的图片,不能进行实时绘制和渲染。因为,后来出现了一些第三方解决方案,如Flash Player等。

  HTML5的出现改变了一切,它引入了< canvas >标签,允许JS动态地绘制图形。

  艺术家们将画布(canvas译为”画布”)作为绘画的地方,类似地,< canvas >标签定义了网页上的绘图区域。有了< canvas >,你就可以使用JS绘制任何你想画的东西。< canvas >提供一些简单的会凸函数,用来描绘点、线、矩形、圆等。

使用< canvas >标签

  为了在< canvas >上绘制二维图形,需经过以下几个步骤:

  • 创建标签,指定绘图范围。
  • 利用JavaScript获取到标签。
  • 向该标签请求二维图形的“绘图上下文”。
  • 使用绘图上下文调用相应的绘图函数,绘制二维图形。

HelloCanvas2d实例

  下面是HelloCanvas2d实例,我们利用< canvas >画个矩形,并用红色填充
此系列我编写的源码都可以在我的github下载到:https://github.com/hushhw/WebGL-Programming-Guide/tree/master/00HelloCanvas2d

<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8" /><title>Clear canvas</title>
</head><body onload="main()"><canvas id="mycanvas" width="400" height="400">Please use the browser supporting "canvas"</canvas><script src="HelloCanvas2d.js"></script>
</body>
</html>
//HelloCanvas2d.js
function main() {//获取<canvas>标签var canvas = document.getElementById("mycanvas");//如果没找到<canvas>标签,则输出错误信息if (!canvas) {console.log('Failed to retrieve the <canvas> element.');return;}//要在<canvas>上绘制图像,须先获取绘图上下文,“2d”代表我们要绘制二维图形。var ctx = canvas.getContext("2d");//fillstyle:设置或返回用于填充绘画的颜色、渐变或模式;这里我们设置填充颜色为红色。ctx.fillStyle = "red";/*使用填充颜色填充矩形。fillRect(x,y,width,height)x    矩形左上角的 x 坐标y    矩形左上角的 y 坐标width        矩形的宽度height   矩形的高度*/ctx.fillRect(120, 10, 150, 150);
}

获取< canvas >元素

//获取<canvas>标签var canvas = document.getElementById("mycanvas");//如果没找到<canvas>标签,则输出错误信息if (!canvas) {console.log('Failed to retrieve the <canvas> element.');return;}

  在HTML文件中通过JS程序获取< canvas >元素。可以使用document.getElementById 的函数来获取。这个方法只有一个参数,就是HTML文件中< canvas >标签的 id 属性
  

通过元素来获取二维图形的绘图上下文

//要在<canvas>上绘制图像,须先获取绘图上下文,“2d”代表我们要绘制二维图形。var ctx = canvas.getContext("2d");

  < canvas >元素可以同时支持二维图形和三维图形,它不直接提供绘图方法,而是提供一种叫上下文的机制来绘图。
  
  在上述代码中,canvas.getContext() 方法的参数制订了上下文的类型(二维或三维)。如果你想要绘制二维图形,就必须指定为2d(区分大小写)。
  
  

绘制二维图形

//fillstyle:设置或返回用于填充绘画的颜色、渐变或模式;这里我们设置填充颜色为红色。ctx.fillStyle = "red";/*使用填充颜色填充矩形。fillRect(x,y,width,height)x    矩形左上角的 x 坐标y    矩形左上角的 y 坐标width        矩形的宽度height   矩形的高度*/ctx.fillRect(120, 10, 150, 150);

  < canvas >的坐标系横轴为x轴(正方向朝右),纵轴为y轴(正方向朝下)。原点(0,0)在左上方。fillRect方法中设置的x,y指的是从坐标的开始算,右移x像素,下移y像素的位置,就是矩形左上角的位置。如图所示:
  

文章内容借鉴于:
《WebGL编程指南》
http://www.cnblogs.com/mirror-pc/p/4179062.html
http://blog.csdn.net/weixin_40282619/article/details/78019085

《WebGL编程指南》学习笔记——2.使用 canvas 元素相关推荐

  1. iPhone编程指南学习笔记

    为什么80%的码农都做不了架构师?>>>    UIWindow 在创建应用程序窗口时,您应该总是将其初始的边框尺寸设置为整个屏幕的大小.如果您的窗口是从nib文件装载得到,Inte ...

  2. Linux Unix shell 编程指南学习笔记(第五部分)

    第二十五章 深入讨论 << 当shell 看到 << 的时候,它知道下一个词是一个分界符.该分界符后面的内容都被当做输入,直到shell又看到该分界符(位于单独的一行).比方: ...

  3. LINUX与UNIX SHELL编程指南 学习笔记

    第1章文件安全与权限 1.2 文件类型 还记得前面一节所提到的文件权限位前面的那个字符吗?我们现在就解释一下这个横杠 所代表的意思,文件类型有七种,它可以从ls -l命令所列出的结果的第一位看出,这七 ...

  4. 【《WebGL编程指南》读书笔记-WebGL入门】

    <WebGL编程指南>读书笔记 目录链接:https://blog.csdn.net/floating_heart/article/details/124001572 第二章 WebGL入 ...

  5. 【WebGL】《WebGL编程指南》读书笔记——第2章

    一.前言 最近看了<WebGL编程指南>这本书,发现还是很有意思的,故每章阅读后做个笔记. 二.正文 Example1:在canvas中绘制2D矩形 <!DOCTYPE html&g ...

  6. 【WebGL】《WebGL编程指南》读书笔记——第5章

    一.前言        终于到了第五章了,貌似开始越来越复杂了. 二.正文         Example1:使用一个缓冲区去赋值多个顶点数据(包含坐标及点大小) function initVerte ...

  7. 【《WebGL编程指南》读书笔记——着色器和程序对象的准备】

    本文为<WebGL编程指南>第九章下半部分读书笔记 总目录链接:https://blog.csdn.net/floating_heart/article/details/124001572 ...

  8. JavaScript 权威指南-学习笔记(一)

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! JavaScript 权威指南-学习笔记 ...

  9. 《Linux高性能服务器编程》学习笔记

    <Linux高性能服务器编程>学习笔记 Linux高性能服务器编程 TCP/IP协议族 TCP/IP协议族体系结构以及主要协议 数据链路层 网络层 传输层 应用层 封装 分用 测试网络 A ...

  10. WebGL three.js学习笔记 6种类型的纹理介绍及应用

    WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...

最新文章

  1. Akamai CDN技术调研
  2. 数据结构笔记--二叉查找树概述以及java代码实现
  3. vue-cli打包后怎么修改服务器地址实践有效
  4. 计算机网络之物理层:3、奈式准则和香农公式
  5. c语言c程序由函数构成 每个函数完成相对独立的功能,17秋学期(1709)《C语言程序设计》在线作业  满分...
  6. matlab2c使用c++实现matlab函数系列教程-load函数
  7. 网易互娱基于 Flink 的支付环境全关联分析实践
  8. 服装企业三步走向PLM,致力提升价值的时尚品牌
  9. 2019最新《web前端课程+项目实践课程》高清无拼凑
  10. 2022G3锅炉水处理上岗证题库及答案
  11. 配置谷歌android依赖镜像
  12. VR全景视频、图片播放器
  13. java libmp3lame_录制MP3格式的音频( lame 库的编译及使用)
  14. arcmap武汉市各个行政区域的森林覆盖率和水体覆盖率
  15. 光雨量传感器:如何滤除雨量信号中的光线干扰
  16. 多个线程ThreadLocal中存的是什么
  17. chdir改变当前目录
  18. 8*8点阵动态显示 I 爱 U
  19. 试用微软 必应输入法 功能简洁
  20. 最新计算机专业技术年度考核,信息技术教师个人年度考核工作总结

热门文章

  1. Weblogic 连接池的建立程序应用
  2. 谈谈python的from __future__ import absolute_import
  3. webpack编译流程漫谈
  4. inux系统磁盘管理基础知识及总结
  5. 精益企业中架构师的角色
  6. java中的构造函数
  7. 算法导论9.1-1习题解答(二叉树)
  8. AdvancedWindowsPasswordRecovery3 及 注册码
  9. Dom4j完整教程,操作XML教程
  10. [Erlang 0026] 目前最优的Erlang IDE