线上展厅
http://www.xiaoli3m.cn/
zh-hans
-
虚拟展厅中所运用的WebGL技术原理简单介绍
http://www.xiaoli3m.cn/news/493
<span>虚拟展厅中所运用的WebGL技术原理简单介绍</span>
<span><span lang="" about="http://www.xiaoli3m.cn/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang="">Jyadmin</span></span>
<span>周三, 12/23/2020 - 15:45</span>
<div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><p>?</p>
<h4><strong>WebGL是什么,用它能做什么?</strong></h4>
<p>WebGL(Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0(OpenGL 的嵌入式平台版本)结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定来实现,WebGL可以为HTML5 Canvas提供硬件3D加速渲染。</p>
<p><img alt="WebGL是什么" data-entity-type="file" data-entity-uuid="e8fa5751-3686-4164-a62b-67bbd5dfe419" src="http://www.xiaoli3m.cn/sites/default/files/inline-images/WebGL%E6%98%AF%E4%BB%80%E4%B9%88.jpg" width="616" height="413" loading="lazy" /></p>
<p>开发者就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型,还能创建复杂的导航和数据视觉化。WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等等。</p>
<p>这项技术还应用了一个绘制所需的专用语言 GLSL:</p>
<p>OpenGL着色语言(OpenGL Shading Language)是用来在OpenGL中着色编程的语言,他们是在图形显卡的GPU (Graphic Processor Unit图形处理单元)上执行的,一般着色器分为两部分:Vertex Shader(顶点着色器)和Fragment(片元着色器),GLSL使用C语言作为基础高阶着色语言。</p>
<p>总的来说,WebGL就是通过js获取Canvas上下文关系,使用JS Api操作GLSL语言进行编程,并最终在Canvas中展示的web图形绘制能力。</p>
<h4><strong>WebGL如何形成指定图像?</strong></h4>
<p><strong>1. WebGL只能绘制点(gl.POINTS)、线(gl.LINES)、三角(gl.TRIANGLES)三种基础图形,任何复杂图形都是由基础图形组合形成的,如下图所示的茶壶(复杂图形),可被拆解为所示的复数基础图形的组合:</strong></p>
<p><strong><img alt="WebGL只能绘制点、线、三角三种基础图形" data-entity-type="file" data-entity-uuid="9008111a-9033-465b-92a8-8d3939250987" src="http://www.xiaoli3m.cn/sites/default/files/inline-images/WebGL%E5%8F%AA%E8%83%BD%E7%BB%98%E5%88%B6%E7%82%B9%E3%80%81%E7%BA%BF%E3%80%81%E4%B8%89%E8%A7%92%E4%B8%89%E7%A7%8D%E5%9F%BA%E7%A1%80%E5%9B%BE%E5%BD%A2.jpg" width="641" height="348" loading="lazy" /></strong></p>
<p><strong>2. 绘制的实现,会经过这三个步骤的处理:</strong></p>
<p>① 获取顶点坐标(即该形状的可见点阵集)</p>
<p>② 图元装配(将顶点绘制成一个一个三角形,拼接成面)</p>
<p>③ 光栅化(将每一个三角形所对应画布的位置和色值计算出来)</p>
<p><img alt="绘制的实现" data-entity-type="file" data-entity-uuid="08fc54f7-52af-4776-93bf-b621266667ec" src="http://www.xiaoli3m.cn/sites/default/files/inline-images/%E7%BB%98%E5%88%B6%E7%9A%84%E5%AE%9E%E7%8E%B0.jpg" width="643" height="151" loading="lazy" /></p>
<p>目标图形绘制的完整流程如下:</p>
<p><img alt="目标图形绘制的完整流程" data-entity-type="file" data-entity-uuid="dbe8f30a-af4b-4703-926a-7ae3a1ccf490" src="http://www.xiaoli3m.cn/sites/default/files/inline-images/%E7%9B%AE%E6%A0%87%E5%9B%BE%E5%BD%A2%E7%BB%98%E5%88%B6%E7%9A%84%E5%AE%8C%E6%95%B4%E6%B5%81%E7%A8%8B.jpg" width="644" height="269" loading="lazy" /></p>
<p><strong>3. 目标图形在实际场景中存在位置、大小、透视关系等影响因素,为了达到符合预期的视觉效果,坐标(X, Y, Z)将经由复数个矩阵变换的计算处理,最终形成指定坐标点(同样片元也会根据矩阵关系计算着色结果)。</strong></p>
<p><strong><img alt="形成指定坐标点" data-entity-type="file" data-entity-uuid="2d955ed5-b747-40ac-93dc-d35fbf565235" src="http://www.xiaoli3m.cn/sites/default/files/inline-images/%E5%BD%A2%E6%88%90%E6%8C%87%E5%AE%9A%E5%9D%90%E6%A0%87%E7%82%B9.jpg" width="647" height="184" loading="lazy" /></strong></p>
<p><strong>4.完成绘制后,通过JS的上下文操作DOM,将在Canvas上成功渲染“</strong><strong>一帧”</strong><strong>图片,即每次计算将得到一组静态的像素序列,用于铺满填充Canvas画布。</strong></p>
<p>此时一次完整的WebGL绘制流程完成。</p>
<p><strong>WebGL的渲染,就是将三维图形的坐标点,经过复杂的加工处理(3D建模),再经由上述步骤的绘制流程,即可通过WebGL在前端页面中完成“一次”绘制操作,此时通过JS将缓存区的图元信息填充至Canvas,即可在网页中展示一张静态绘制图,受限于篇幅原因,详细的实现细节建议通过网络示例进行了解。</strong></p>
<p>?</p>
<p>?</p>
</div>
<div class="field field--name-field-tags field--type-entity-reference field--label-above">
<div class="field--label">标签</div>
<div class="field--items">
<div class="field--item"><a href="http://www.xiaoli3m.cn/taxonomy/term/16" hreflang="zh-hans">线上展厅</a></div>
</div>
</div>
Wed, 23 Dec 2020 07:45:03 +0000
Jyadmin
493 at http://www.xiaoli3m.cn