WebGL学习笔记--绘制三角形

2020-12-24  本文已影响0人  辣椒爸
image.png

三角形在现实世界有着重要的作用,如上图中的球体建筑是由一个个三角形构建起来的,同样地三角形在图形学中也有着重要的地位,构成三维模型的基本单位是三角形,因此理解如何绘制三角形是入门WebGL的基础。

image.png

本文记录自己在学习过程中遇到的迷茫之处以及自己的理解,甚至仅仅是为了让自己容易接受某个知识点而做出的天马行空的假想,也就是说仅是针对某个片段或知识点进行记录,比较碎片化,限于篇幅本文不会将整个绘制过程及代码重复贴在这里。《WebGL编程指南》一书相关章节已提供了详细的讲解和源码,请参阅相关章节。
WebGL应用的整体流程为:

image.png

想想我们在几何课上是怎么绘制三角形的,首先确定三角形的三个顶点坐标,然后依次画出三个顶点之间的边,这样就完成了三角形的作图。其实WebGL绘制三角形的思路也差不多,WebGL学习笔记--WebGL入门一文中提到WebGL系统运行在GPU中,而js代码运行在CPU中,最终绘制的图形通过html中的canvas元素进行呈现。

image.png

三个顶点唯一确定一个三角形,因此首先需要解决如何将js中的顶点坐标传给WebGL系统。就像货轮最高效的工作方式是一次装满一整船集装箱再出发一样,将三个或更多顶点坐标传给WebGL系统最高效的方法当然也是一次性传送多个坐标,而非一次仅传送一个。这里传送多个顶点使用的技术是缓冲区对象。

缓冲区对象是WebGL系统中的一块存储区,你可以在缓冲区对象中保存想要绘制的所有顶点的数据(仅针对本例而言,其实缓冲区对象可以保存任何想要保存的数据)。缓冲区对象的使用步骤及涉及的WebGL方法如下图所示。

image.png

本文暂不涉及片元着色器的内容,顶点着色器获取到顶点坐标数据后,WebGL系统的绘制流程就继续进行后续的绘制流程了,进而完成三角形的绘制。这里绘制用到基本图形的绘制方法gl.drawArrays(int mode, int first, int count)

image.png

注:顶点序号从大到小的顺序为绘制的顺序

WebGL只能绘制三种图形:点、线段和三角形,但是这些是绘制更复杂图形的基础,熟练掌握了你就可以发挥自己的创造力用它来绘制任何你想要的东西。

上一篇 下一篇

猜你喜欢

热点阅读