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新单位vw、vh的使用教程
Mar 23 HTML / CSS
使用纯 CSS 创作一个脉动 loader效果的源码
Sep 28 HTML / CSS
css和css3弹性盒模型实现元素宽度(高度)自适应
May 15 HTML / CSS
HTML5使用Audio标签实现歌词同步的效果
Mar 17 HTML / CSS
详解HTML5中垂直上下居中的解决方案
Dec 20 HTML / CSS
HTML5 input元素类型:email及url介绍
Aug 13 HTML / CSS
html5基础标签(html5视频标签 html5新标签用法)
Dec 30 HTML / CSS
使用html5制作loading图的示例
Apr 14 HTML / CSS
HTML5 Canvas绘制五星红旗
May 04 HTML / CSS
HTML5中使用postMessage实现两个网页间传递数据
Jun 22 HTML / CSS
总结html5自定义属性有哪些
Apr 01 HTML / CSS
如何在CSS中绘制曲线图形及展示动画
May 24 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与ASP
2006/10/09 PHP
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
python之消除前缀重命名的方法
2018/10/21 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
python3 re返回形式总结
2020/11/20 Python
怎样客观的做好自我评价
2013/12/28 职场文书
优秀的自荐信要注意哪些
2014/01/03 职场文书
商场活动策划方案
2014/01/24 职场文书
《一株紫丁香》教学反思
2014/02/19 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
文明倡议书范文
2014/04/15 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
残疾人小组计划书
2014/04/27 职场文书
档案信息化建设方案
2014/05/16 职场文书
技术股东合作协议书
2014/12/02 职场文书
刘公岛导游词
2015/02/05 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python