![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=1739462905-HOuaSe3tHaYanDPX1uR6CHch1ZegpoV5-0-02531087a91f5ebf39d3a7271bf542be)
我们定义了<canvas>标签(第9行),通过width属性和height属性规定它是一片400×400像素的区域,并用id属性为其指定了唯一的标识符(这将在之后用到):
![](https://epubservercos.yuewen.com/762C61/26126292801765606/epubprivate/OEBPS/Images/txt002_5.jpg?sign=1739462905-6Obuktel4Hfn1e5c64s2MoM0FPx2MRj6-0-1a2ac91c3302f227c56f124fa9ae7d5f)
默认情况下,<canvas>是透明的,如果不用JavaScript在上面画些什么(我们马上就要这样做了),你是看不到<canvas>的。在HTML中为WebGL程序准备一个<canvas>就是这么简单,需要注意的是,这行代码只在支持<canvas>的浏览器中起作用,不支持<canvas>的老式浏览器会直接忽略这一行,当然也不会显示<canvas>。我们可以像下面这样在标签中加入一条错误信息,以提醒还在用着那些老式浏览器的用户。
![](https://epubservercos.yuewen.com/762C61/26126292801765606/epubprivate/OEBPS/Images/txt002_6.jpg?sign=1739462905-M1WOSnxA0jFow4piUZX73Yu4n2LlP2Sn-0-cc6853181bb7624da4ed1c6778a8e0c4)
为了在<canvas>中绘图,还需要编写一些相关的JavaScript代码。可以将其直接写在HTML文件中,也可以写成单独的JavaScript文件。为使代码更加易读,在我们的例子中采用第二种方式。但是不论采取哪种方式,你都需要告诉浏览器JavaScript代码从何处开始执行。我们为<body>元素指定onload属性,告诉浏览器<body>元素加载完成后(也就是页面加载完成后)执行main()函数,并作为JavaScript程序的入口(第8行)。
![](https://epubservercos.yuewen.com/762C61/26126292801765606/epubprivate/OEBPS/Images/txt002_7.jpg?sign=1739462905-Q2mjBUZeSNo9BcBGKRjJ1YwHz0R73pGq-0-e606c8f29bce9e1dfd21894a6d0a1d9c)
然后让浏览器去加载JavaScript文件DrawRectangle.js,main()函数就定义在其中。
![](https://epubservercos.yuewen.com/762C61/26126292801765606/epubprivate/OEBPS/Images/txt002_8.jpg?sign=1739462905-1e6x7o6kuBnj8dooCoBtYE8gTyaeG8xv-0-66e22194d888c68bc8bfb4f1440158bc)
为了避免混淆,本书中的所有示例程序的HTML文件,和加载到其中的JavaScript文件都使用相同的名称(如图2.3所示)。
![](https://epubservercos.yuewen.com/762C61/26126292801765606/epubprivate/OEBPS/Images/txt002_9.jpg?sign=1739462905-muzTzvoKOVksjHjfRfh4X50SNpWNVCJ2-0-4026d354b0b870e5ac5a757f026fb5cb)
图2.3 DrawRectangle.html和DrawRectangle.js