![WebGL编程指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/252/46841252/b_46841252.jpg)
使用<canvas>标签
让我们来看一下HTML是如何使用<canvas>标签,以及DrawRectangle函数是如何工作的。例2.1显示了DrawingRectangle.html。请注意,本书中所有的HTML文件都是采用HTML5编写的。
例2.1 DrawingRectangle.html
![](https://epubservercos.yuewen.com/762C61/26126292801765606/epubprivate/OEBPS/Images/txt002_4.jpg?sign=1738968566-p7VrsPi08SJ9niaHMzjXH2qdViuERwIr-0-6a4fdb2b3b66db1a7de719873862e45d)
我们定义了<canvas>标签(第9行),通过width属性和height属性规定它是一片400×400像素的区域,并用id属性为其指定了唯一的标识符(这将在之后用到):
![](https://epubservercos.yuewen.com/762C61/26126292801765606/epubprivate/OEBPS/Images/txt002_5.jpg?sign=1738968566-QJzKi8XrCpEk22way7yZnurZphxV5om7-0-7815292af09c8cd0549b5ddea87ab4de)
默认情况下,<canvas>是透明的,如果不用JavaScript在上面画些什么(我们马上就要这样做了),你是看不到<canvas>的。在HTML中为WebGL程序准备一个<canvas>就是这么简单,需要注意的是,这行代码只在支持<canvas>的浏览器中起作用,不支持<canvas>的老式浏览器会直接忽略这一行,当然也不会显示<canvas>。我们可以像下面这样在标签中加入一条错误信息,以提醒还在用着那些老式浏览器的用户。
![](https://epubservercos.yuewen.com/762C61/26126292801765606/epubprivate/OEBPS/Images/txt002_6.jpg?sign=1738968566-32hMrKPrrEuhckqHpFpR4nmtVWwrZIyn-0-9cd601f9e7fb1af4a36a33ee498263dc)
为了在<canvas>中绘图,还需要编写一些相关的JavaScript代码。可以将其直接写在HTML文件中,也可以写成单独的JavaScript文件。为使代码更加易读,在我们的例子中采用第二种方式。但是不论采取哪种方式,你都需要告诉浏览器JavaScript代码从何处开始执行。我们为<body>元素指定onload属性,告诉浏览器<body>元素加载完成后(也就是页面加载完成后)执行main()函数,并作为JavaScript程序的入口(第8行)。
![](https://epubservercos.yuewen.com/762C61/26126292801765606/epubprivate/OEBPS/Images/txt002_7.jpg?sign=1738968566-rxrYxATqt9xhAROK9B2UMpcwRlCHNmhr-0-aefdf1ad641a0b1e6f7ed4a851c867d6)
然后让浏览器去加载JavaScript文件DrawRectangle.js,main()函数就定义在其中。
![](https://epubservercos.yuewen.com/762C61/26126292801765606/epubprivate/OEBPS/Images/txt002_8.jpg?sign=1738968566-hlvTTwmH5HI8fPcaQ4y8OVeVrz5o3BOG-0-fa38ab30e03d96104dc8c849c711f3bd)
为了避免混淆,本书中的所有示例程序的HTML文件,和加载到其中的JavaScript文件都使用相同的名称(如图2.3所示)。
![](https://epubservercos.yuewen.com/762C61/26126292801765606/epubprivate/OEBPS/Images/txt002_9.jpg?sign=1738968566-5Hb1MtLHr7AZh4zbhpPPFB3jpYfTH4rA-0-d3baa98f0342ec5d1a95ca07666c9562)
图2.3 DrawRectangle.html和DrawRectangle.js