Web开发

首页 » 常识 » 常识 » WebGL的基础概念
TUhjnbcbe - 2024/4/11 17:28:00
白癜风应注意什么 https://m.39.net/disease/a_5862251.html

WebGL经常被当成3DAPI,人们总想“我可以使用WebGL和一些神奇的东西做出炫酷的3D作品”。事实上WebGL仅仅是一个光栅化引擎,它可以根据你的代码绘制出点,线和三角形。想要利用WebGL完成更复杂任务,取决于你能否提供合适的代码,组合使用点,线和三角形代替实现。

WebGL在电脑的GPU中运行。因此你需要使用能够在GPU上运行的代码。这样的代码需要提供成对的方法。每对方法中一个叫顶点着色器,另一个叫片断着色器,并且使用一种和C或C++类似的强类型的语言GLSL。(GL着色语言)。每一对组合起来称作一个program(着色程序)。顶点着色器的作用是计算顶点的位置。根据计算出的一系列顶点位置,WebGL可以对点,线和三角形在内的一些图元进行光栅化处理。当对这些图元进行光栅化处理时需要使用片断着色器方法。片断着色器的作用是计算出当前绘制图元中每个像素的颜色值。

几乎整个WebGLAPI都是关于如何设置这些成对方法的状态值以及运行它们。对于想要绘制的每一个对象,都需要先设置一系列状态值,然后通过调用gl.drawArrays或gl.drawElements运行一个着色方法对,使得你的着色器对能够在GPU上运行。这些方法对所需的任何数据都需要发送到GPU,这里有着色器获取数据的4种方法。

属性(Attributes)和缓冲

缓冲是发送到GPU的一些二进制数据序列,通常情况下缓冲数据包括位置,法向量,纹理坐标,顶点颜色值等。你可以存储任何数据。属性用来指明怎么从缓冲中获取所需数据并将它提供给顶点着色器。例如你可能在缓冲中用三个32位的浮点型数据存储一个位置值。对于一个确切的属性你需要告诉它从哪个缓冲中获取数据,获取什么类型的数据(三个32位的浮点数据),起始偏移值是多少,到下一个位置的字节数是多少。缓冲不是随意读取的。事实上顶点着色器运行的次数是一个指定的确切数字,每一次运行属性会从指定的缓冲中按照指定规则依次获取下一个值。

全局变量(Uniforms)

全局变量在着色程序运行前赋值,在运行过程中全局有效。

纹理(Textures)

纹理是一个数据序列,可以在着色程序运行中随意读取其中的数据。大多数情况存放的是图像数据,但是纹理仅仅是数据序列,你也可以随意存放除了颜色数据以外的其它数据。

可变量(Varyings)

可变量是一种顶点着色器给片断着色器传值的方式,依照渲染的图元是点,线还是三角形,顶点着色器中设置的可变量会在片断着色器运行中获取不同的插值。

web3d技术让您的产品在线您的网站上实时度展示

1
查看完整版本: WebGL的基础概念