WEBGL基础知识介绍
1、场景(scene)
场景如其名,即显示3D空间内物体的容器,就好比一个箱子是一个3D场景。
2、坐标系:
webgl使用笛卡尔坐标系(宽度、高度和深度),我们也可以指定使用其它坐标系统。
WEBGL与过去我所使用的flash3D坐标系有一些区别,在flash3d中,屏幕的左上角为坐标系原点,向下为Y轴正方向,向右为X轴正方向,而在webgl中,屏幕的中心点为原点。
但是在3D世界中还有第三个坐标轴即Z轴,它表示场景的深度。
在webgl的世界中我们可以使用左手法则来辅助记忆三个轴的正方向,伸出左手,食指伸直保持水平,中指垂直向下,拇指指向自己,其余手指收起,食指所指方向即x轴的正方向,中指所指方向即y轴正方向,拇指所指的方向即z轴的正方向。
3、投影的概念:
我们在屏幕上所看到的三维空间,并非是一个真实的3D空间,而是用数学算法将模拟的三维空间投射到屏幕上的二维图像而已。投影就是将模拟的三维空间内的物体映射到屏幕上生成一个二维图像的过程。投影分为正交投影和透视投影,这也就是摄像机的实现原理。
4、摄像机:
摄像机是场景内的一个观察者,人通过屏幕看到的画面实际上是3D空间内的物体映射到摄像机内的画面,这个画面很可能并不是完整的,仅仅是摄像机当前可见范围内的。这与摄像机的种类有关。
在three.js中有两种,正交摄像机和透视摄像机。
正交摄像机的视野范围就像一个正方体,正方体内的物体沿着正方体的边缘投影到每个侧面的物体大小都与立方体内的物体大小相同,所以使用正交摄像机投影到屏幕的画面我们是无法分辨物体的远近的,这种摄像机多用于在3D空间绘制2D图形,如医用检查设备,我们不使用。
透视摄像机就如一个顶部被削平的金字塔,金字塔顶部被削平的面可以理解为我们的屏幕,在金字塔内的物体沿着金字塔纵方向进行投影,并投射到顶部,假设有两个大小形状完全相同的物体分别位于金子塔内的不同高度,他们投影到顶部的影子的大小就会不同,这就是透视相机的。使用透视摄像机我们可以在平面内很容易分辨出3D空间内物体的远近。现在把金字塔放倒,将削平的顶端对这你的眼睛,这样就很容易理解在透视相机时计算机是如何渲染物体的了。
5、渲染:
渲染即执行代码在屏幕上绘制图形的过程。渲染是实时执行的,就如一个播放的电影,由许多连续的帧组成,帧就好比一场电影中的一个瞬时的画面。
6、点与向量
点是由三个值组成,x、y和z,每个点可以表示3D空间的一个唯一位置,每个点也可表示一个向量,也叫做三维向量,向量可以理解为指向场景中心的一个线段,我们知道点有三个值,这样的向量叫做单位向量或标量,它仅仅表示向量的方向,不能表示向量的长度,现在我们给一个这个标量再增加一个值,第四个值表示向量的长度,这样我们就有了一个既有长度又有方向的向量了,这样的向量叫做四维向量。
7、面、顶点与三角形:
我们知道要确定一个唯一的平面我们至少需要三个点,将三个点用线连起来就形成了一个三角平面,我们称这三个点为顶点,顶点就是图形突起的部。
8、网格模型:
3D空间内任何形状的物体都称之为模型,无论是立体模型还是平面模型都由至少三个顶点组成,将这些顶点用线连接起来就组成了模型。还需要知道在现在计算机图形学中,所有的模型,无论复杂程度,都是由多个三角形拼接而成的。我们常见的球体看起来很圆滑,其实是由很多个三角形绘制而成,由于密度很高肉眼很难察觉其边缘的顶点。
由于这些模型都是使用线条连接而成,看起来就像一张捕鱼的渔网被扭曲成各种形状,我们称这种没有材质的模型叫做网格模型(它看起来是镂空的)。
9、纹理贴图以及材质
纹理就是一个平面化的图形,它可以是纯色填充的也可以是使用位图填充的。
材质就是使用纹理构建的一种代码环境中的对象,我们将材质对象应用到模型网格上,使其更加逼真形象,达到预期设想的效果。
更加容易理解的方式:纹理好比一颗大树,材质好比是用这颗大树打造的一块木板,我们可以将木板钉在一个立方体网格对象上,这样我们就有了一个木箱。
10、矩阵和模型变换
如果向量是一个数组[x,y,z],那么矩阵就是一个二维数组即,
| x x x x |
| |
| y y y y |
| |
| z z z z |
| |
| 0 0 0 1 |
每一列表示一个四维向量,上面我们创建了一个4X4的矩阵,在webgl中我们常用的矩阵为4X4和3X3。
模型变换就是利用矩阵使得模型的大小、位移、旋转等产生变化的过程,通常我们会使用模型的内置矩阵与变换矩阵相乘从而得到变换后的新矩阵并赋予模型。每个模型被创建后都会拥有自己的模型矩阵,我们无需关注模型矩阵是如何产生的,只需要知道对模型进行模型变换需要将模型矩阵与变换矩阵相乘。具体如何操作矩阵自行查询相关资料,这里不做赘述。
11、视图变换
视图变换就是不通过调整模型本身的参数,而是直接控制摄像机、场景的移动而产生的视觉变化,比如我们将摄像机像模型方向拉近,我们就会感觉模型在逐渐变大,我们将场景原点逐渐拉远我们就会感觉模型在渐渐远离我们。
13、着色器语言
1)
顶点着色器:顶点着色器是用来控制光照、颜色、位移等,假如我们要渲染一个三形,顶点着色器就将执行三次,它会为每个顶点都执行一次。注意在顶点着色器执行时我们还没有通过屏幕看到绘制的图形,顶点着色器是为后续的光栅化处理做铺垫,它将为光栅化操作提供必要的资源,顶点着色器是光栅化处理的仓库。
2)
片段着色器:了解片段着色器先要了解光栅化是什么意思,光栅化就是绘制每两个顶点之间的像素并形成线段的过程,就好比我们要画一个栅栏,我们要一根一根的画。
片段着色器就是告诉GPU如何光栅化的语言,就如其名字,将光照、纹理、位移等沿着顶点之间的线段逐个像素的渲染。
14、webgl中最流行的js库three.js介绍:
首先最外层为场景,场景中包含一个或多个摄像机,场景中还可以包含模型、粒子等。
模型、粒子等也可包含在Object3D对象中。
创建一个模型的过程是:
1) 创建模型所需要的顶点
2) 创建一个几何图形对象,并将顶点传递给几何图形对象。
3) 创建模型的纹理对象即材质。
4) 创建网格对象,并将几何图形对象以及纹理对象传递给网格对象。
5) 将网格添加到可容纳网格对象的容器内,如scene、Object3D等。
术语FAQ:
1、场景:Scene
2、位置:Position
3、投影:Projector
4、正交:Orthographic
5、透视:Perspective
6、摄像机:Camera
7、渲染:Render
8、向量:Vector
9、三维向量:Vector3
10、四维向量:Vector4
11、矩阵:Matrix
12、3行3列矩阵:Matrix3
13、4行4列矩阵:Matrix4
14、顶点:Vertex
15、顶点的复数形式:Vertices
16、几何对象:Geometry
17、纹理:Texture
18、材质:Material
19、网格:Mesh
20、变换:Transform
21、视图:View
分享到:
相关推荐
它是WebGL学习笔记的重点,特别是在初学者阶段。WebGL的核心是光栅化引擎,它能够根据程序员编写的代码在GPU上绘制点、线和三角形,进而构建复杂的3D场景。 在WebGL中,所有图形渲染都是通过GPU来执行的,这需要...
在这个名为"WebGL-Study-Notes"的资源包中,我们可以预见到一系列关于WebGL的学习笔记和示例代码。 WebGL的核心是通过JavaScript与GPU(图形处理器)进行通信,从而实现硬件加速的图形渲染。它允许开发者在网页上...
然而,WebGL的原生API对开发者来说是相当复杂的,涉及到顶点着色器和片元着色器的编程,需要掌握一定的数学知识(如线性代数和向量几何)以及图形学原理。这不仅需要耐心,也需要相当的学习投入。 Three.js则是一个...
【Three.js学习笔记】 在现代网页开发中,三维可视化已经成为一种流行趋势,Three.js作为一款强大的JavaScript 3D库,让开发者能够轻松地在浏览器中创建出引人入胜的三维场景。它不仅封装了复杂的WebGL接口,还提供...
学习WebGL,GLSL和Three.js 文章,有用的资源,课件,个人笔记工作坊Mapping Festival 2019 /工作坊6·23.05.2019 10h–19h ·( ...亚历山大·奥弗沃德(Alexander Overvoorde)的OpenGL简介WebGL基础知识(Greggman,
这份“WebKit 开发学习笔记”全面覆盖了从基础到高级的 WebKit 相关知识,是开发者深入理解 Web 技术、提高浏览器开发能力的重要参考资料。通过阅读和实践,开发者可以逐步掌握 WebKit 的核心原理和技术细节,为自己...
这篇学习笔记将深入探讨HTML5游戏开发的关键技术和实践方法。 首先,我们要理解HTML5的基础。HTML5是超文本标记语言的最新版本,它增强了网页的结构化和语义化能力,引入了新的元素如`<canvas>`、`<audio>`和`...
### JavaScript 学习笔记知识点概览 #### 一、JavaScript 的功能与特点 - **JavaScript 可以做什么:** - 动态交互:通过JavaScript可以让网页具备动态效果,如响应用户操作、验证表单、操作DOM等。 - 前端与...
学习WebGL的过程中,你可能会接触到以下知识点: - WebGL上下文创建:通过`canvas.getContext('webgl')`获取WebGL渲染上下文。 - 顶点和索引:定义3D物体的形状,通过顶点数组和索引数组构建几何体。 - 矩阵变换:平...
在本文中,我们将深入探讨JavaScript库three.js的基础知识,特别是关注照相机的使用,这是创建3D场景的关键组件。Three.js是一个广泛使用的WebGL库,它简化了在浏览器中进行3D图形编程的过程。 一、基本知识 1.1 ...
【标题】"2015 年东京 ...这些内容对于想要学习或深化WebGL技能的开发者来说,都是极具价值的知识点。通过研究2015年东京WebGL聚会的资料,我们可以了解到当时WebGL技术的发展状况,以及当时社区关注的重点和最佳实践。
通过这些资源,学习者可以系统地掌握Flash和ActionScript,从基础理论到实际应用,逐步成长为熟练的Flash开发者。不过,需要注意的是,随着HTML5的普及,现代Web开发更多地转向了Canvas和WebGL等技术,但Flash仍然在...
通过学习和实践《egret贪吃蛇下游戏》,开发者不仅可以掌握Egret的基本用法,还能深入理解游戏开发的核心逻辑,为进一步开发更复杂的游戏奠定基础。这款小游戏虽然简单,但它涵盖了游戏开发的诸多基本概念和技术,...
这篇学习笔记将深入探讨Flash3D技术和Sandy库的应用。 首先,让我们了解一下Flash3D的基础。Flash是由Adobe开发的一种多媒体平台,它支持矢量图形、音频、视频以及交互性,广泛应用于网页设计、游戏开发和在线应用...
在本笔记中,我们将深入探讨HTML、JavaScript(JS)、jQuery(JQ)、CSS以及HTML5这五种核心技术,这些都是前端开发者必备的知识。 ### HTML(超文本标记语言) HTML是构建网页的基础,它定义了页面的结构和内容。...
JavaScript是一种广泛用于前端开发的脚本语言,初级阶段会涉及变量、数据类型、运算符、控制流(条件语句和循环)、函数等基础知识。进阶内容包括对象和原型链、闭包、异步编程(回调函数、Promise、async/await)...
【Unity3D笔记】是关于Unity3D游戏引擎的基础学习资料。Unity3D是一个强大的跨平台游戏开发工具,被广泛用于创建2D和3D游戏、应用以及实时可视化项目。以下是一些Unity3D的基本知识点: 1. **游戏对象与组件**:在...
这篇笔记主要涵盖了前端开发中的三大核心技术:ES6(ECMAScript 6),HTML5和CSS3,这些都是现代前端开发的基础。下面将详细阐述这三个领域的关键知识点。 首先,ES6(ECMAScript 6),是JavaScript语言的一个重大...
【笔记本】与JavaScript编程 在IT领域,"笔记本"这个词可能指的是笔记本电脑,这...通过"notebook-master"中的内容,不仅可以学习到JavaScript的基础知识,还可以了解到如何在实际项目中应用这些知识,提高编程能力。
一、AS3基础知识 AS3与之前的版本相比,具有更强的性能和更严谨的语法结构。它引入了强类型系统,提升了代码的稳定性和可维护性。AS3的核心概念包括数据类型(如基本类型、类和对象)、数组(包括数组声明和操作函数...