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 相关文章推荐
CSS3的新特性介绍
Oct 31 HTML / CSS
CSS3 制作绽放的莲花采用效果叠加实现
Jan 31 HTML / CSS
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
Apr 16 HTML / CSS
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
Jul 19 HTML / CSS
HTML5 video 视频标签使用介绍
Feb 03 HTML / CSS
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
Jun 23 HTML / CSS
HTML5 Convas APIs方法详解
Apr 24 HTML / CSS
使用phonegap创建联系人的实现方法
Mar 30 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
Aug 17 HTML / CSS
深入浅析HTML5中的article和section的区别
May 15 HTML / CSS
Html5页面内使用JSON动画的实现
Jan 29 HTML / CSS
css中有哪些方式可以隐藏页面元素及区别
Jun 16 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
PHP脚本的10个技巧(4)
2006/10/09 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
VBScript版代码高亮
2006/06/26 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
Python的lambda匿名函数的简单介绍
2013/04/25 Python
Python3.2中Print函数用法实例详解
2015/05/19 Python
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
利用python爬取斗鱼app中照片方法实例
2017/12/03 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
python如何实现代码检查
2019/06/28 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
Python实现微信好友的数据分析
2019/12/16 Python
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
SQL Server面试题
2013/04/04 面试题
学生生病请假条范文
2014/02/16 职场文书
《春笋》教学反思
2014/04/15 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
泰山导游词
2015/02/02 职场文书
保护环境的宣传语
2015/07/13 职场文书