WebGL 入门-WebGL简介与3D图形学

什么是WebGL?

WebGL是一项使用JavaScript实现3D绘图的技术,浏览器无需插件支持,Web开发者就能借助系统显卡(GPU)进行编写代码从而呈现3D场景和对象。

WebGL基于OpenGL ES 2.0,OpenGL ES 是 OpenGL 三维图形 API 的子集,针对手机、平板电脑和游戏主机等嵌入式设备而设计。浏览器内核通过对OpenGL API的封装,实现了通过JavaScript调用3D的能力。WebGL 内容作为 HTML5 中的Canvas标签的特殊上下文实现在浏览器中。

WebGL标准由科纳斯组织(Khronos Group)开发和维护,Google、Mozilla、Opera和Apple 等浏览器厂商都是其中的成员,为这一标准做出了显著贡献。

WebGL支持现状

目前所有的主流桌面浏览器都已经支持WebGL,但手机端的浏览器只有部分最新版支持。

桌面浏览器

  • Mozilla Firefox 4+
  • Google Chrome 8+
  • Internet Explorer 11+
  • Safari 5.1+
  • Opera 12+

移动浏览器

  • Firefox 25+
  • Google Chrome 31+
  • Opera Mobile 12+
  • Android Browser 暂不支持
  • iOS Safari暂不支持
  • IE Mobile 暂不支持

3D图形学

在真正开始学习WlebGL之前,我们还要改了解下3D图形学,有助于接下来的3D图形编程。

3D坐标系

笛卡儿坐标系相比大家都很熟悉,即数学中常见的直角坐标系,由两条互相垂直的坐标轴组成,通常标记为x轴和y轴。这种坐标系可以用于定义页面中元素的坐标位置。

而在绘制3D图形时,除了x轴和y轴,我们还需要一个z轴,用于表示深度,即3D物体距离屏幕的距离。

点、线、面和网格

3D空间内的所有物体都是由点、线及面组成。一个点由3个值组成 - x、y、z,表示3D空间内的唯一位置。2个点可以连成一条线,3个点我们就可以形成一个平面。多个面相互拼接就组成了网格。

我们常见的球体看起来很圆滑,其实是由很多个点、线、面组合而成的。

纹理贴图及材质

网格本身是没有纹理和材质的。

纹理可以定义一个网格表面的外观,可以是纯色或者是填充位图,甚至更加复杂。

材质就是网格表面的特性,模型外表是否透明、是否会反射等都是通过网格的材质所定义的。

变换和矩阵

3D网格的形状由顶点位置决定。模型变换就是利用矩阵对模型的大小、位移、旋转等进行操作。如果你不了解矩阵也无须担心,许多WebGL库都能帮助我们完成相应的操作。

摄像机、视口和投影

我们在Canvas上看到的3D空间并非一个真实的3D空间,而是用数学算法将模拟的3D空间投射到2D视口的图像而已。投影就是将模拟的三维空间内的物体映射到屏幕上生成一个二维图像的过程。投影分为正交投影和透视投影,这也就是摄像机的实现原理。

摄像机是用户观察场景的眼睛,摄像机的视野决定了透视关系和我们在Canvas上看到的内容。

着色器

为了最终的渲染模型,开发者必须精确的定义定点、变换、材质和相机之间的关系。这就是由着色器来完成的。着色器包含了将模型投射到屏幕上的算法,通常是由类C语言编写,编译并运行在图形处理单元(GPU)中。

时间: 2024-10-06 17:48:33

WebGL 入门-WebGL简介与3D图形学的相关文章

《WebGL入门指南》——第1章,第1.2节3D图形学——入门

1.2 3D图形学--入门 WebGL入门指南 "数学太难了啦!" --芭比娃娃 也许有点不太好听,但是我必须得说,当我写3D图形的代码的时候,我会和芭比一样,有强烈的欲望想要用疯狂购物来放纵一下自己.因为3D图形编程通常很难,而且需要大量的数学知识.幸运的是,你不需要先成为数学大师再来写WebGL应用:我们会使用各种框架来代替我们去做其中大部分的复杂工作.尽管如此,理解底层的工作原理依然是非常重要的,因此下面我尝试在几页的篇幅内总结出整个3D图形学的基础知识. 1.2.1 3D坐标系

《WebGL入门指南》——第2章,第2.1节Three.js——一个JavaScript 3D引擎

2.1 Three.js--一个JavaScript 3D引擎 WebGL入门指南 需求是创新之母.每个开发者在项目之初都必须不厌其烦的使用WebGL原生API来编写代码,直到可以建立一个自己的代码库,以用于随后的通用3D编程.事实上,已经有很多人完成了这项工作.现在有很多不错的WebGL开源框架,例如GLGE(http://www.glge.org/).SceneJS(http://www.scenejs.org/).CubicVR(http://www.cubicvr.org/)等.每个框架

《WebGL入门指南》——第2章,第2.4节一个真实的3D示例

2.4 一个真实的3D示例 WebGL入门指南 到目前为止,你也许在想"真是个还不错的正方形",然后开始怀疑我们什么时候开始画一些真正的3D图形.好吧,那就现在吧!在示例2-2中我们将会用更有趣的物体来代替正方形,我们将会完成一个看起来还不错.并且展示了大部分WebGL主要特性.同时还保持代码简洁的页面. 图2-2就是页面的最终效果.其中我们设置了标题文字,添加了一个表面贴有图片的立方体,然后在页面底部也添加了文字.另外值得一提的是,这个页面是可以交互的:点击画布元素,立方体就会开始或

《WebGL入门指南》——导读

目 录第1章 WebGL简介 1.1 WebGL--一个技术定义 1.2 3D图形学--入门 1.3 WebGL原生API 1.4 本章小结 第2章 你的第一个WebGL程序 2.1 Three.js--一个JavaScript 3D引擎 2.2 建立Three.js运行环境 2.3 一个简单的Three.js网页2.4 一个真实的3D示例 2.5 本章小结 第3章 图形 第4章 动画 第5章 交互 第6章 2D与3D的整合 第7章 实战WebGL 第8章 你的第一个WebGL游戏 后记 附录A

《WebGL入门指南》——第1章,第1.3节WebGL原生API

1.3 WebGL原生API WebGL入门指南 计算机图形学中的基本概念在过去的数年中从未发生过变化.但图形技术却不断进化,特别是最近几年,伴随着设备和操作系统的多样化.这些百花齐放的图形技术的根基则是诞生于20世纪80年代末期的OpenGL.OpenGL作为行业规范已经存在了非常长的时间,并且成功经受住了来自微软的DirectX的竞争考验,无可争辩的成为了3D图形编程的领衔者. 但是并非所有的OpenGL都是一样的.根据不同平台的不同特征,包括台式电脑.智能电视.手机和平板电脑等,人们开发了

《WebGL入门指南》——第2章,第2.5节本章小结

2.5 本章小结 WebGL入门指南 本章介绍了第一个真实示例.我必须要说,这其实还是很轻松的.仅仅使用了很少的代码,我们就可以创建一个包含3D内容的HTML网页,装扮它,用动画赋予它生命,然后让它可以交互.你要意识到在过去这是根本不可能的.感谢WebGL,让这一切都变成了现实.而又有了Three.js,可以让你在开发前不必先去考取一个计算机图形学的学位. 我们已经构建和运行起来了WebGL,剩下的就都是细节了.

《WebGL入门指南》——第1章,第1.1节WebGL——一个技术定义

1.1 WebGL--一个技术定义 WebGL入门指南 WebGL 标准是由科纳斯组织(Khronos Group)开发和维护的,该组织还是管理着 OpenGL.COLLADA等其他你也许早有耳闻的规范的标准组织.以下是科纳斯组织的网站上对WebGL的官方描述: WebGL是免授权费的,跨平台的应用程序接口API,它将OpenGL ES 2.0作为在HTML网页内的3D绘图环境,作为低级别文档对象模型接口开放.它使用OpenGL渲染语言GLSL ES,并可被整洁地与其他3D内容上层或下层的网页内

《WebGL入门指南》——第1章,第1.4节本章小结

1.4 本章小结 WebGL入门指南 这样我们就结束了WebGL基础知识之旅.噢!东西可真多啊!现在你也许在想,仅仅在屏幕上画一个正方形就如此兴师动众.而且,这还不是一个真正的3D物体!好吧,我部分同意你的意见.WebGL编程,在这个等级上的编程,是相当困难的.标准的设计者做出这样一个决定还是相当清醒的,他们用这样一个既小巧又简单的标准,换取了WebGL强大的能力,而付出的代价是开发者必须要在应用程序端编写大量的代码. 显然,在大部分情况下,我们不会使用WebGL来绘制2D物体.HTML5的2D

《WebGL入门指南》——第2章,第2.3节一个简单的Three.js网页

2.3 一个简单的Three.js网页 WebGL入门指南 好了,我想现在是时候来编写你的第一个 WebGL 程序了.在这一节中,你会看到上手Three.js是一件相当简单的事情.示例2-1实际上是第1章中的那个绘制正方形示例的翻版,但是将代码从150行精简到30行.由此可见,在使用Three.js之后对代码的压缩量之大. 示例2-1 一个简单的Three.js网页 <!DOCTYPE html> <html> <head> <title>A Simple