关于如何使用three.js的小教程一
昨天看了看three.js这个东西,身为一个3D引擎,他还是非常强大的。官网上有个tutorial讲的不甚具体。/tutorials/getting-started-with-three-js/
扯淡的内容比?多,有个人做了翻译在这里http://blog.csdn.net/webgl_/article/details/6424749
有一个外国人的教程系列是这个http://www.smashinglabs.pl/three-js-tetris-tutorial粗略看了一下是好像做一个俄罗斯方块,代码比?多。
有一个中国人写的教程在这里/HTML5features/WebGL/.html代码比?少,只是有非常多经典的图。
在github上面能够获取到three.js的源代码,直接下载ZIP即可了/mrdoob/three.js/
眼下google chrome是不支持xp的webGL的,opera近期推出了一个实验版支持xp下的webGL,使用xp的用户能够搜一下。
文件夹大概是这个样子,build中装的是压缩好的js代码,使用Three.js的时候仅仅须要包括./build/Three.js就能够了。./build/custom 之中应该提供了一些供你自己定义使用的脚本。
./docs 下提供了一个很简陋的API文档,只是能够将就着看。
./examples 里面有许多的样例,这个很好。当中比?多的是webGL开头的和Canvas开头的文件,大概是提供了,两种技术实现的比?,webGL比Canvas快100倍(非官方统计),毕竟webGL使用了硬件加速嘛,比?明显的看canvas_geometry_hierarchy.ht和webgl_geometry_hierarchy.html这两个样例。./examples 的子目录以下是一些 元素的脚本 比方 ./js/ShaderExtra.js
就是一些现成的shader代码,能够直接拿来用,或者一些字体和统计FPS的脚本,three.js里面用的是./js/stats.js这个脚本来做一些统计工作。还有就是一些models什么的。
./src 里面放的就是源代码了
./gui 里面应该是一些图形化的东西,没有细致研究。
./utils 里面是一些工具,应该是一些编译连接的脚本什么的。
three.js的使用比?简单,一个基本的camera ,一个基本的 scene ,一个render(这个东西翻译成渲染器,就是Canvas,WebGL,SVG什么的),其他的light , materials,object,虾米的都是为了好看用的。
先说这个Camera ,three.js的camera有非常多种,最简单的叫做这个perspectiveCamera透视相机,或者这个远景相机,这样来新建一个实例。
var camera, scene,
var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;
camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 100, 10 );
camera.position.z = 1;
四个属性各自是,摄像机的视锥角度,视口的长宽比,摄像机的近切面(Front Clipping Plane)和远切面(Back Clipping Plane),这样就确定了摄像机的视锥。
position.z是垂直于屏幕,也就是近切面远切面的距离。
当然还能够通过camera.lookAt来调整camera的朝向,只是在这里不是必需。
以地球举例,如果地球垂直摆放,视锥角度非常小时,仅仅能看到赤道周围的图像,近切面远切面相距过近时仅仅能看到东半球或西半球,这个说也说不太清楚,自己改改?数试一试,即可。
scene的创建非常easy,直接new一下就好,然后就是把各种东西add到sence里面即可了,就像这样。
var camera, scene,
scene = new THREE.Scene();
scene.add( camera );
接下来就是加入一些object,这里我们使用一个叫做mesh的东西,使用这个网格模型,比?easy建立简单的几何体,球体啊,柱体啊,什么的,当然非常炫的modal还须要maya之类的专业工具。
mesh的结构是这种
mesh = new THREE.Mesh( new THREE.SphereGeometry( 200, 20, 20 ), new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( './land_ocean_ice_cloud_2048.jpg' ), overdraw: true } ) );
scene.add( mesh );
创建一个球体的函数是这样
THERE.SphereGeomrtry(radius,&segments,&rings) 第一个?数是半径,后两个能够理解成球体的精细程度,数值越高球体就越圆,能够吧后两个?数调低自己体会一下。
THERE.MeshBasicMaterial() 就是材质了,假设想要一个单色材质的话能够这样
var sphereMaterial = new THREE.MeshLambertMaterial(
color: 0xCC0
});使用自己定义图片的话是这样,overdraw是过度渲染的一个开关如今还不重要。
var sphereMaterial = new THREE.MeshBasicMaterial(
map: THREE.ImageUtils.loadTexture( './land_ocean_ice_cloud_2048.jpg' ), overdraw: true
最后设置一下mesh的位置,把它增加到scene中就能够了
mesh.position.y = - 250;
mesh.rotation.x = - 90 * Math.PI / 180;
scene.add( mesh );
渲染器的创建也非常easy,这里使用的是一个CanvasRenderer,最后须要把render的dom加到container的最后,简单点说就是,通过渲染器吧3D图像输出到页面上。
至于dom结构的介绍在这里.cn/htmldom/是一个树形结构,appendChild方法,是把?数里的dom加入到指定节点,的最后一个节点。
var container = document.getElementById( 'container' );
renderer = new THREE.CanvasRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement );
循环渲染,实现3D图形的动态须要不断改变camera的位置,通过不断的渲染来达成动画的效果
render方法实现视角的转换,
animate方法实现循环渲染,
原理是无限递归调用,requestAnimationFrame这个函数非常牛逼,有兴趣能够看看源代码。
stats.update();是更新FPS的不用管。
function animate() {
requestAnimationFrame( animate );
stats.update();
function render() {
camera.position.x += ( mouseX - camera.position.x ) * 0.05;
camera.position.y += ( - mouseY - camera.position.y ) * 0.05;
camera.lookAt( scene.position );
mesh.rotation.y -= 0.005;
renderer.render( scene, camera );
最后把代码整合起来是这种,实现了一个,转动的地球。代码中用到的两张图片在exmples/textures中能够找到
&!doctype html&
&html lang=&en&&
&title&three.js canvas - geometry - earth&/title&
&meta charset=&utf-8&&
&meta name=&viewport& content=&width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0&&
color: #808080;
font-family:M
font-size:13
text-align:
background-color: #
top: 0 width: 100%;
padding: 5
color: #0080
&div id=&info&&&a href=&/mrdoob/three.js& target=&_blank&&three.js&/a& - earth demo&/div&
&div id=&container&&&/div&
//存放场景的块
&script src=&./Three.js&&&/script&
//直接把Three.js放在相同文件夹下就能够了
&script src=&./Stats.js&&&/script& //这个是统计FPS的,没什么用,认为麻烦的话能够吧与Stats有关的代码删掉
var container,
var camera, scene,
var mouseX = 0, mouseY = 0;
var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;
animate();
//循环渲染
function init() {
container = document.getElementById( 'container' );
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 100, 10 );
camera.position.z = 1;
scene.add( camera );
//创建球体
mesh = new THREE.Mesh( new THREE.PlaneGeometry( 300, 300, 3, 3 ), new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( './shadow.png' ), overdraw: true } ) );
mesh.position.y = - 250;
mesh.rotation.x = - 90 * Math.PI / 180;
scene.add( mesh );
//创建阴影
mesh = new THREE.Mesh( new THREE.SphereGeometry( 200, 20, 20 ), new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( './land_ocean_ice_cloud_2048.jpg' ), overdraw: true } ) );
scene.add( mesh );
renderer = new THREE.CanvasRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement );
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '0px';
container.appendChild( stats.domElement );
function animate() {
requestAnimationFrame( animate );
stats.update();
function render() {
camera.position.x += ( mouseX - camera.position.x ) * 0.05;
camera.position.y += ( - mouseY - camera.position.y ) * 0.05;
camera.lookAt( scene.position );
mesh.rotation.y -= 0.005;
renderer.render( scene, camera );
Deom的打包资源,能够在我的上传资源中下载。
http://download.csdn.net/detail/wangyi_lin/4164117
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
昨天看了看three.js这个东西,身为一个3D引擎,他还是很强大的.官网上有个tutorial讲的不甚详细./tutorials/getting-started-with-three-js/ 扯淡的内容比较多,有个人做了翻译在这里http://blog.csdn.net/webgl_/article/details/ ...
dubbo小教程
先给出阿里巴巴dubbo的主页:/wiki/display/dubbo/Home-zh 自己的demo下载地址:http://download.csdn.net/detail/u63315 1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供 ...
由于客户的需要,最近都在整帝国cms,很多东西还是不熟悉,特别是帝国cms模板,以前用的那些网站模板一般是保存在ftp文件中,而帝国cms模板是直接保存在数据库中,修改是在网站后台的模板管理,得慢慢适应. 这几天接到一个站,整体是做得差不多了,就是有很多细节还没解决,例如帝国cms站内搜索还不能实现.本着好奇的新鲜,就随着xmyanke一起来鼓捣一下吧. 在 ...
jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档.
jquery.cookie中的操作: jquery.cookie.js是一个基于jquery的插件,/carhartl/jquery-cookie 创建一个会话cookie: $.cookie(‘cookieN ...
昨天萌发的一个爱好,绘画板画画,不知道可以爱好多久,山山说我三心两意,三分钟热度,好象真的是这样哦!!我要改改改!以前就知道有绘画板这回事,知道是代替鼠标的一个连接电脑的绘画设备,不过有个疑问,起稿是在纸上手绘了扫描到电脑然后用绘画板上色吗?上网查了下教程,原来不是,现在科技太发达了,绘画板都可以模拟真实的笔触效果! 下面转载了一篇网上的小教程:
首先,在 ...
◆面向对象变成的综合案例 游戏的简单分析 ⑴ 看看如何通过按钮来控制mario的位置 ⑵ 设计相关的对象(Mario x,y) 要求 1.mario碰到边界,就给个提示 2.mario可以去找另外一个物体 第35讲.js超级玛丽小游戏2.js面向对象的进一步说明 ◆构造函数(方法)介绍 基本用法 funcion 类名(参数列表){ 属性=参数值; } 举例: ...
web开发常用js功能性小技巧 -------------------------------------------------------------------------------- &!DOCTYPE HTML PUBLIC &-//W3C//DTD HTML 4.0 Transitional//EN&&; < ...
JS代码小集合 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();
event.srcElement.releaseCapture();
事件按键 event.keyCode event.shiftKey event.altKey ...[天门优惠促销] 16:21:55
自动挡停车 别挂了P挡后人就走了...
600)this.width=600;" /> [查看全文]
[杭州本地快讯] 17:57:53
】“停车难,开车堵”是杭州司机共同的烦恼,尤其是在市中心开车、停车,难度更是成倍增加。据2015年底的数据,杭州主城区的机动车保有量约为112万辆,而停车位数量是57万个(包含住宅小区配套停车位),杭州的交通压力和停车难可窥一斑。为解决这两个问题,杭州采取了许多办法,推行“P+R”停车场就是其中之一。...
600)this.width=600;" /> [查看全文]
[贵阳车市点评] 09:33:46
在月底举办的古德伍德速度节上,将会是车迷们一次天堂般的聚会。目前迈凯伦官方预告,P1 GTR将第二次在古德伍德亮相,而且为纪念一位传奇车手James Hunt(詹姆斯?亨特)在迈凯伦车队夺冠40周年(James Hunt曾在1976年驾驶迈凯伦赛车获得年度冠军),将推出一辆特别涂装版的P1 GTR。...
600)this.width=600;" /> [查看全文]
[车壁虎] 08:45:57
现在大部分使用自动挡车的车主,在等红灯的时候,应该挂什么档呢?有车主喜欢挂P档,有车主喜欢挂D档踩着刹车,其实这些都是非常错误的做法。...
600)this.width=600;" /> [查看全文]
[新车入保定] 00:18:02
【太平洋汽车网 新车频道】日前,有国内媒体曝光了一组英致全新皮卡的谍照信息,据悉新车内部代号为P80,定位为一款全尺寸高端皮卡。...
600)this.width=600;" /> [查看全文]
[秦皇岛最新活动] 14:16:59
【太平洋汽车网 新车频道】在所有375台迈凯伦P1售罄之后,这家大英帝国超跑车厂后续又推出了它的终极赛道版??迈凯伦P1 GTR。近日,迈凯伦官方宣布,P1 GTR已经正式开始投产,截止目前,已经收到42个订单,而该车的总量将被限制在45个单位。...
600)this.width=600;" /> [查看全文]
[大连本地快讯] 16:03:04
【太平洋汽车网 大连车主通】随着地铁的开通,相信越来越多的私家车主希望乘地铁出行,这样即省了油费,又不用忍受堵车之苦,何乐而不为呢?...
600)this.width=600;" /> [查看全文]
[新车入沧州] 00:16:27
【太平洋汽车网 沧州车市】根据最新消息,迈凯伦P1 GTR最终量产版将在今年3月开幕的日内瓦车展亮相,有望搭载混合动力系统,并且将于今年下半年实现量产。...
600)this.width=600;" /> [查看全文]
[新车入沧州] 10:30:34
【太平洋汽车网 沧州车市】根据最新消息,迈凯伦P1 GTR最终量产版将在今年3月日内瓦车展亮相,有望搭载混合动力系统,并且将于今年下半年实现量产。...
600)this.width=600;" /> [查看全文]
[新车入沧州] 14:14:17
【太平洋汽车网 沧州车市】根据最新消息,迈凯伦P1 GTR的最终量产版将在今年3月日内瓦车展亮相,有望搭载混合动力系统,并且将于今年下半年实现量产。...
600)this.width=600;" /> [查看全文]
豪车实拍 改装 FB MM 八卦
汽车广告 新车 新闻 活动