|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 weiter 于 2024-7-10 18:08 编辑
声明:本人极度业余,本系列无法实现有条理的编排,文中会出现很多问题,望周知。
什么是WebGL?
WebGL 使得网页在支持 HTML<canvas> 标签的浏览器中,不需要使用任何插件,便可以使用基于OpenGL ES 2.0 的 API 在 canvas 中进行 3D 渲染。
WebGL 程序由 javascript 的控制代码,和在计算机的图形处理单元(GPU, Graphics Processing Unit)中执行的特效代码 (shader code,渲染代码) 组成。
WebGL 元素可以和其他 HTML 元素混合,并且会和页面的其他部分或页面背景相合成。
WebGL经常被当成3D API,人们总想“我可以使用WebGL和一些神奇的东西做出炫酷的3D作品”。 事实上WebGL仅仅是一个光栅化引擎,它可以根据你的代码绘制出点,线和三角形。 想要利用WebGL完成更复杂任务,取决于你能否提供合适的代码,组合使用点,线和三角形代替实现。
WebGL在电脑的GPU中运行。因此你需要使用能够在GPU上运行的代码。 这样的代码需要提供成对的方法。每对方法中一个叫顶点着色器, 另一个叫片段着色器,并且使用一种和C或C++类似的强类型的语言 GLSL。 (GL着色语言)。 每一对组合起来称作一个 program(着色程序)。
顶点着色器的作用是计算顶点的位置。根据计算出的一系列顶点位置,WebGL可以对点, 线和三角形在内的一些图元进行光栅化处理。当对这些图元进行光栅化处理时需要使用片段着色器方法。 片段着色器的作用是计算出当前绘制图元中每个像素的颜色值。
几乎整个WebGL API都是关于如何设置这些成对方法的状态值以及运行它们。 对于想要绘制的每一个对象,都需要先设置一系列状态值,然后通过调用 gl.drawArrays 或 gl.drawElements 运行一个着色方法对,使得你的着色器对能够在GPU上运行。
上文中提到的着色器可以通过四种方法获取数据:
属性(Attributes)和缓冲 缓冲是发送到GPU的一些二进制数据序列,通常情况下缓冲数据包括位置,法向量,纹理坐标,顶点颜色值等。 你可以存储任何数据。 属性用来指明怎么从缓冲中获取所需数据并将它提供给顶点着色器。 例如你可能在缓冲中用三个32位的浮点型数据存储一个位置值。 对于一个确切的属性你需要告诉它从哪个缓冲中获取数据,获取什么类型的数据(三个32位的浮点数据), 起始偏移值是多少,到下一个位置的字节数是多少。 缓冲不是随意读取的。事实上顶点着色器运行的次数是一个指定的确切数字, 每一次运行属性会从指定的缓冲中按照指定规则依次获取下一个值。
全局变量(Uniforms) 全局变量在着色程序运行前赋值,在运行过程中全局有效。
纹理(Textures) 纹理是一个数据序列,可以在着色程序运行中随意读取其中的数据。 大多数情况存放的是图像数据,但是纹理仅仅是数据序列, 你也可以随意存放除了颜色数据以外的其它数据。
各位最熟悉的应该就是——
可变量(Varyings) 可变量是一种顶点着色器给片段着色器传值的方式,依照渲染的图元是点, 线还是三角形,顶点着色器中设置的可变量会在片段着色器运行中获取不同的插值。
WebGL发展
相比Unity,Cocos, 虚幻5等桌面3D引擎,WebGL服务于网页且起步较晚,所以WebGL的表现会比常见的桌面端3D引擎差上一亿点。但是在网页端中WebGL却是目前最稳定可靠的。(应该是这么说没错吧)
——来源:bilibili-冰哥图形学工作站
WebGL在浏览器上的兼容怎么样?
表格实在是太长了我选择直接丢一个链接:WebGL:web 中的 2D 的 3D 图形 - Web API | MDN (mozilla.org)
虽然但是WebGL毕竟比较原生始,更高效的开发中会使用Three.js等集成后的产物。比如下图中的——
——来源:CSDN-Web前端开发V
——来源:百度开发者中心-蛮不讲李
很多专有名词和概念啥的我其实没太搞明白所以如果哪里说错了请一定帮我指出啊啊谢谢了。
为了防止出一些未知的错误,多数内容会选择直接copy,所以可能翻译腔会比较重请多包涵。
暑假快结束了终于打算干点正事,有可能会因为大学开学打乱进度。
毕竟本人咸鱼一条烂泥扶不上墙嘛,随时可能断更,如果喜欢请收藏哦。
|
|