Computer Knowledge and Technology 电脑知识与技术多媒体技术及其应用本栏目责任编辑:唐一东第7卷第28期(2011年10月)基于webGL 和HTML5的网页3D 动画的设计与实现
谭文文,丁世勇,李桂英
(山东科技大学,山东青岛266071)
摘要:该文介绍了webGL 如何把JavaScript 和OpenGL ES 2.0结合在一起,对网页中的三维可视化图像进行实现,讲述了基于we -bGL 和HTML5的应用程序回调函数的具体用法与实现,并通过具体的应用实例验证了设计的正确性。
关键字:webGL ;JavaScript ;OpenGL ES 2.0;HTML5
中图分类号:TP311文献标识码:A 文章编号:1009-3044(2011)28-6981-03
Web-3D animation Design and Implementation Based on webGL and HTML5
TAN Wen-wen,DING Shi-yong,LI Gui-ying
(Shandong University of Science and Technology,Qingdao 266071,China)
Abstract:In this paper ,it introduces how webGL combines JavaScript with OpenGL ES 2.0for the web of 3D visualization image.It tells the specific usage and implement based on the application callback functions of webGL and HTML5,and shows the correctness of the de -sign through an application example.
Key words:webGL;JavaScript;OpenGL ES 2.0;HTML5
WebGL 是一种3D 绘图标准,这种绘图技术标准允许把JavaScript 和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript 绑定,WebGL 可以为HTML5Canvas 提供硬件3D 加速渲染,这样Web 开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D 场景和模型了,还能创建复杂的导航和数据视觉化。显然,WebGL 技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D 结构的网站页面,甚至可以用来设计3D 网页游戏等等。
HTML5将成为HTML 、XHTML 以及HTML DOM 的新标准。HTML 的上一个版本诞生于1999年。自从那以后,Web 世界已经经历了巨变。HTML5仍处于完善之中。然而,大部分现代浏览器已经具备了某些HTML5支持[4]。
1程序设计中所引用的关键技术介绍
1.1HTML 5的Canvas 元素
HTML5的canvas 元素使用JavaScript 在网页上绘制图像。相当于画布,它是一个矩形区域,您可以控制其每一像素,canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。我们可以通过下面语句创建并规定canvas 元素的id 、宽度和高度:
<canvas id="myCanvas"width="200"height="100"></canvas>
canvas 元素本身是没有绘图能力的。所有的绘制工作必须在JavaScript 内部完成:
<script type="text/javascript">
var ElementById("myCanvas");
var Context("2d");
cxt.fillStyle="#FF0000";
cxt.fillRect(0,0,150,75);
</script>
上述这段语言完成了在canvas 中绘制一个红的矩形。
1.2webGL 中的可编程处理器
WebGL 中引用了OpenGL es2.0的可编程处理器,这也是webGL 的关
键所在,即顶点着器和片元着器,所以接下来本文详细论述了可编程
管线是如何对数据进行处理的。
1.2.1可编程管线的具体流程
图1描述了顶点着器和片元着器在可编程管线中的具体位置以
及整个API 的调用顺序,这个示意图也向我们展示了可编程管线的流处收稿日期:2011-07-25
基金项目:青岛市科技发展计划项目(批准号:11-2-4-4-(6)-jch );山东省优秀中青年科学家科研奖励基金(批准号:BS2011DX029)作者简介:谭文文(1986-),女,山东莱芜人,硕士,主要研究方向为通信与信息系统,软件开发,3D UI 开发;丁世勇(1987-),男,江
苏丹阳人,硕士,主要研究方向为通信与信息系统,IC 芯片设计开发,多媒体应用;李桂英(1984-),女,山东聊城人,硕
士,主要研究方向为物理电子学,多媒体应用。
图1webGL 的可编程管线图
E-mail:************* www.dnzs Tel:+86-551-56909635690964ISSN 1009-3044Computer Knowledge and Technology
电脑知识与技术Vol.7,No.28,October 2011.6981
Computer Knowledge and Technology 电脑知识与技术本栏目责任编辑:唐一东多媒体技术及其应用
第7卷第28期(2011年10月)理本质:数据流从应用程序到达顶点处理器,然后到达片元处理器,最后到达帧缓冲区[3]。
1.2.2着器的数据处理
首先来介绍一下着器中所使用到的几种限定符:
Attribute :用于经常更改的信息,用于从应用程序到顶点着器所传的数据。
Uniform :用于不经常更改的信息,用于顶点着器和片元着器。
varying :用于从顶点着器传递到片元着器。
Const :用来声明非可写的编译时常量变量。跟C 语言相同。
顶点着器所操作的是输入的顶点值与其相关联的数据。它可以用来执行顶点变换,发现变换以及规格化,纹理坐标生成,纹理坐标变换,光照等。
比较简单的顶点着器程序代码如下:
<script id="shader-vs"type="x-shader/x-vertex">
attribute vec3aVertexPosition;
attribute vec4aVertexColor;
uniform mat4uMVMatrix;
uniform mat4uPMatrix;
varying vec4vColor;
void main(void){
gl_Position =uPMatrix *uMVMatrix *vec4(aVertexPosition,1.0);
vColor =aVertexColor
}
</script>
片元着器是一个处理片元值及其相关数据的可编程单元。片元着器用来执行传统的图形操作,例如在插值得到的值上的操作,访问纹理,应用纹理,雾化,颜汇总等等。此外光照也可以选择在片元着器上进行,而且效果会比顶点着器要好一些。片元着器不会取代在webGL 像素处理管道的后端发生的固定功能图形操作,例如覆盖、像素所有权测试、剪切、点画、alpha 测试、深度测试、模板测试、逻辑操作等等。对片元着器的主要输入是插值得到的易变变量(内置的及用户定义的),它们是栅格化的结果。用户定义的易变变量必须被定义在片元着器中,并且它们的类型必须在顶点着器中定义的类型相符。此外,需要注意的是再片元着器中是没有属性变量的定义的[5]。
比较简单的片元着器程序代码如下:
<script id="shader-fs"type="x-shader/x-fragment">
void main(void){
varying vec4vColor;
gl_FragColor =vColor;
}
</script>
图2介绍了顶点着器和片元着器中的整个数据
处理流程。
1.3着器与程序对象的链接图3展示了在webGL 的执行环境中是如何处理webGL 着器与应用程序的链接的。应用程序通过构建的对象调用API 函数与webGL 进行通信。利用gl.creatShader 创建着器对象,之后应用程序可以通过调用gl.shaderSource 来提供着器的源代码。使用这个命令可以向webGL 提供包含着器源代码的字符串。将着器源代码加载到着器对
象中后,可以调用glpileShader 来编译它。“程序对象”是webGL 管理的一种数据结构,它
由gl.creatProgram 创建,它充当了着器对象的容器。应用程序需要使用命令gl.attachShader
将着器对象附加到一个程序对象上。之后通过调用gl.linkProgram 可以将编译好的着器
对象链接到一起,链接步骤会解决着器之间的外部引用,检查顶点着器与片元着器之
间的兼容性,向一致变量指定内存位置等。其结果就是产生一个或多个可执行代码,通过调
用gl.useProgram 就可以将它们安装为webGL 当前状态的一部分。这个命令会在顶点处理器
和片元处理器上安装可执行代码,以便用它们来渲染之后的所有图形图元。
执行着器的程序代码如下(以顶点着器为例):
var shader;
var shaderProgram;
shader =gl.createShader(gl.VERTEX_SHADER);//创建顶点着器对象
javascript程序设计软件gl.shaderSource(shader,str);//加载着器源代码
glpileShader(shader);//编译着器源代码
shaderProgram =gl.createProgram();//创建程序对象
gl.attachShader(shaderProgram,shader);//将着器对象附加到程序对象
gl.linkProgram(shaderProgram);//
链接着器对象图2
顶点着器和片元着器的数据处理流程
图3webGL 着器执行模型6982
Computer Knowledge and Technology 电脑知识与技术多媒体技术及其应用本栏目责任编辑:唐一东第7卷第28期(2011年10月)gl.useProgram(shaderProgram);//安装可执行代码
2模拟太阳系的动画设计
绘制太阳系的动画图像大致流程图如图4。
其中前四个过程在前面讲的关键技术中已经详细阐述过,现在我们从初始化缓冲区开始阐明,
初始化缓冲区时要给顶点位置,纹理坐标,法向量坐标,索引坐标分别设置缓冲区,比如初始化顶点
位置缓冲区的代码如下:
sunVertexPositionBuffer =gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER,sunVertexPositionBuffer);
gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertexPositionData1),gl.STATIC_DRAW);
unVertexPositionBuffer.itemSize =3;
sunVertexPositionBuffer.numItems =vertexPositionData1.length /3;
初始化纹理时最重要的是要设置纹理环境,也就是设置合适的纹理参数,代码如下[1-2]:
如何实现动态过程这一步是在绘制过程实现的,比如代码:ate(mvMatrix,degToRad(moonAngle),[0,1,0]);
这一命令实现的是让整个坐标系沿Y 轴旋转moonAngle 角度,moonAngle 这个
变量的值会随着系统时间的增加而逐渐增加,所以再次绘制时转动的角度又会变大,
这样便实现了图像的动态过程。图5描述了在网页上运行的模拟太阳系动画图像。
3结论
本论文通过描述webGL 的工作流程介绍了如何基于webGL 和Html5实现网页
3D 动画图像,通过论证,WebGL 完美地解决了现有的Web 交互式三维动画的两个问
题:第一,它通过Html 脚本本身实现Web 交互式三维动画的制作,无需任何浏览器
插件支持;第二,它利用底层的图形硬件加速功能进行的图形渲染,是通过统一的、标
准的、跨平台的OpenGL 接口实现的,可移植性好。所以webGL 的发展前景是可想而
知的[6]。参考文献:
[1]
Wright R S.OpenGL Super Bible[M].北京:人民邮电出版社,2010.[2]
Shreiner D.OpenGL Programming Guide[M].北京:机械工业出版社,2008.[3]
Rost R J.OpenGL Shading Language[M].北京:人民邮电出版社,2006.[4]
JavaScript 教程[EB/OL].www.w3school/js/index.asp.[5]
WebGL Lesson 1–A triangle and a square[DEB/OL].(2009-10-13).learningwebgl/blog/?p=28.[6]web 开发、网页编程———
编程入门网
[EB/OL].www.bianceng/webkf/.图4
应用程序绘制流程图
图5模拟太阳系的网页动画实现图像6983
学校工作总结
本学期,我校工作在全体师生的大力支持下,按照学校工作计划及行事历工作安排,紧紧围绕提高教育教学质量的工作思路,不断强化学校内部管理,着力推进教师队伍建设,进一步提高学校办学水平,提升学校办学品位,取得了显著的成绩。现将我校一学期来的工作总结如下:
一、德育工作
本学期我校德育工作围绕学校工作中心,精心安排了“文明守纪”、“良好习惯养成”、“光辉的旗帜”、“争先创优”等主题教育月活动,从培养学生的行为规范,狠抓养成教育入手,注重务实,探索途径,加强针对性、实效性和全面性,真正把德育工作落到实处。
1.强化学生养成教育,培养学生良好习惯。本学期,我校德育工作十分注重学生的常规管理,尤其重视对学生的养成教育。一是利用班队会、红领巾广播站、国旗下演讲对学生进行品德熏陶。二是以文明监督岗为阵地,继续强化了“文明班集体”的创建评比活动,通过卫生、纪律、两操等各项常规的评比,增强了学生的竞争意识,同时也规范了学生的行为。三是继续加大值周检查的力度,要求值周领导、教师、学生按时到岗,在校门口检查、督促学生有秩序出入校园,从而使学生的行为规范时时有人抓,处处有人管,形成了良好的局面。
2.抓好班主任队伍建设,营造全员育人氛围。班主任是学校德育工作最重要的力量,为了抓好班主任队伍建设,提高班主任素质水平,学校在第十二周组织开展了班主任工作讲座,在学期末举行了班主任工
作交流,在活动中探索行之有效的工作方法,总结经验,交流心得,使班级管理工作更上新台阶。
3.充分发挥主题班队会的教育功能。主题班队会,是对学生进行德育教育的一种特殊而卓见成效的方式之一。为了充分发挥主题班队会的教育意义,第十三周,四(3)中队举行了“祖国美,家乡好”主题队会观摩活动,有效规范了我校主题中队会程序,强化了主题队会对学生的思想教育作用。
二、学校管理工作
1.建立健全规章制度。学期初,学校制定了出明确的目标计划及管理措施,做到了目标明确、工作具体,有效地增强了全体教师参与学校管理的主人翁意识,充分调动了全体教师的工作积极性,保障了教育教学工作的顺利开展。
2.因人分工、职责明确。学校实施中层领导包级、值周制度,对学校的中层干部进行合理分工,责任到人,让每一位行政领导干部都能充分发挥自己的才能。
3.坚持周一例会制度。学校每周星期一早上召开行政会,下午召开教师会议,贯彻“集体领导,会议决定”的要
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论