HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍


Posted in HTML / CSS onJanuary 31, 2013

前面我们看到了使用原生的WebGL API开发是多么的累,正因为如此,大量的WebGL框架被开发出来。使用这些框架,你可以快速创建需要的3D场景。这些框架不同程度的封装了创建3D场景的各种要素,例如场景,相机、模型、光照、材质等等;使用这些封装起来的对象,就可以很简单的创建需要的3D场景,这样你就只需要把更多精力放在逻辑方面就可以了。

目前并没有哪一个具有能压倒其他框架的优势,选择什么样的框,还是看个人喜好吧,不过选择框架的时候,个人觉得还是多看看框架最后的更新时间,选择稳定更新的框架能让你始终能使用上最新的特性,使你的程序稳定性更好。

下面的例子就使用了Three.js框架进行开发。
Three.js是一个比较全面的开源框架,它良好的封装的3D场景的各种要素。你可以用它来很容易的去创建摄像机,模型,光照,材质等等。你还可以选择不同的渲染器,Three.js提供了多种渲染方式,你可以选择使用canvas来渲染,也可以使用WebGL或者SVG来进行渲染。

 此外,Three.js可以加载很多格式的3D文件,你的模型文件可以来自Blender,Maya,Chinema4D,3DMax等等。而且内置了比较基础的东西:(球体)Spheres, (飞机)Planes, (立方体) Cubes, (圆柱体)Cylinders。Three.js创建这些物体会非常的容易。

好了,不废话了,直接看代码:

复制代码
代码如下:

<!DOCTYPE html>
<html>
<head>
<title>threeJSDemo </title>
<meta charset="utf-8">
<style>
body
{
margin:0px;
background-color:#B0B0B0;
overload:hidden;
}
</style>
</head>
<body>
<script src="Three.js"></script>
<script>
var camera,scene,renderer;
var mesh;
init();
animate();

function init(){
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(70,window.innerWidth / window.innerHeight,1,1000);
camera.position.z = 400;
scene.add(camera);
geometry = new THREE.CubeGeometry(200,200,200);
material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );
mesh = new THREE.Mesh(geometry,material);
scene.add(mesh);
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth,window.innerHeight);
document.body.appendChild(renderer.domElement);
}
function animate() {
requestAnimationFrame( animate );
mesh.rotation.x += 0.05;
mesh.rotation.y += 0.05;
renderer.render( scene, camera );
}
</script>
</body>
</html>


这个是全部的代码,相对于前面使用WebGL的API的代码,这个简直就是太简单了。
代码很直观,就那么几步:
1. 创建场景scene。
2. 创建摄像机camera。
3. 创建/加载模型geometry。
4. 加载材质material。
5. 渲染模型对象mesh(是由geometry和material组成)。
6. 启用动画。

这是每个框架都提供的功能,使用不同的框架除了函数的名称可能不同以外,这些步骤基本都是一样的。下面的参考中列出了很多的框架学习文档,大家可以选几种学习一下。

针对模型数据,我还想说一点,因为JSON短小精悍,所以比较适合网络传输。未来它可能成为最适合WebGL的模型数据格式,所以很多的框架都开始支持JSON格式的模型数据。

实用参考:
开发中心:https://developer.mozilla.org/en/WebGL

精品在线开发工具:http://webglplayground.net/
各种框架基础教程:http://www.html5china.com/HTML5features/WebGL/
WebGL中文教程:http://www.hiwebgl.com/?p=42
Oak3D中文教程:http://www.hiwebgl.com/?cat=57
CubicVR3D官网: http://www.cubicvr.org/
Three.js图形库: https://github.com/mrdoob/three.js
各种框架的收集贴:http://www.appcrews.com/2011/07/129.html

HTML / CSS 相关文章推荐
CSS伪类与CSS伪元素的区别及由来具体说明
Dec 07 HTML / CSS
纯CSS实现的大小渐变、渐远效果
Apr 15 HTML / CSS
CSS3+js实现简单的时钟特效
Mar 18 HTML / CSS
使用HTML和CSS3绘制基本卡通图案的示例分享
Nov 06 HTML / CSS
纯CSS3实现8组超炫酷鼠标滑过图片动画
Mar 16 HTML / CSS
CSS3制作圆形滚动进度条动画的示例
Nov 05 HTML / CSS
HTML5对手机页面长按会粘贴复制禁用的解决方法
Jul 19 HTML / CSS
canvas实现飞机打怪兽射击小游戏的示例代码
Jul 09 HTML / CSS
HTML5中的Article和Section元素认识及使用
Mar 22 HTML / CSS
HTML5 video 视频标签使用介绍
Feb 03 HTML / CSS
完美解决IE8下不兼容rgba()的问题
Mar 31 HTML / CSS
解决html5中的video标签ios系统中无法播放使用的问题
Aug 10 HTML / CSS
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
Jan 31 #HTML / CSS
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
Jan 31 #HTML / CSS
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
Jan 31 #HTML / CSS
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
Jan 31 #HTML / CSS
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
Jan 31 #HTML / CSS
突袭HTML5之Javascript API扩展3—本地存储全新体验
Jan 31 #HTML / CSS
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
Jan 31 #HTML / CSS
You might like
php设计模式 FlyWeight (享元模式)
2011/06/26 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
施工安全生产承诺书
2014/05/23 职场文书
文明单位创建材料
2014/12/24 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
生产车间管理制度
2015/08/04 职场文书
教导处教学工作总结
2015/08/12 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
Javascript 解构赋值详情
2021/11/17 Javascript
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL
vue实现登陆页面开发实践
2022/05/30 Vue.js