在javascript中使用Three.js设计而且实现3D场景是一个颇有意思的事情,由于在浏览器中就可以渲染出3D场景,很是简单和轻便。接下来就总结如下我学习Three.js过程当中的心得。javascript
1 创建基本场景 在Three.js中有三要素:场景、摄像机和渲染器,只有以上三者结合才能渲染出可见的内容。固然在这以前你须要先下载Three.js文件,直接百度搜索Three.js到官网下载便可,下载完成以后新建一个html文件而且引入Three.js便可。一个最基本的使用Three.js的html文件应该是这样子的:html
dawn1 3D body { margin: 0; } canvas { width: 100%; height: 100%; } 咱们打开浏览器看一下:哦天哪,发生了什么,浏览器上黑乎乎一片什么都没有啊。java
别急,这是由于咱们只是设置了三要素,但并无渲染,只有使用渲染器scene和camera进行渲染以后才能看到内容,在scene.add( cube ); 后面添加一句:canvas
renderer.render(scene, camera); 再试试效果如何:浏览器
快看,如今屏幕中出现了一个正方形,这正是咱们所期待的!markdown
可是,咱们使用的Three.js不该该是三维场景吗,为何如今只有平面效果?不急,接下来咱们使用requestAnimationFrame让画面动起来!学习
2 让画面动起来 将上一步中最后一句代码:动画
renderer.render(scene, camera); 替换为:spa
// 动画 function animate() {设计
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render( scene, camera );
requestAnimationFrame( animate );
复制代码
} animate() 再到浏览器看看效果,若是没有什么问题的话,如今你所看到的画面应该是一个旋转的立方体:
不过我对这个效果仍是不满意,它看起来像是一个 正方体,但缺乏了阴影灯光效果,接下来咱们添加灯光效果。
3 添加光效 使用点光源THREE.SpotLight,代码以下:
// 光源 var spotLight = new THREE.SpotLight( 0xffffff ); spotLight.position.set( -40, 60, -10 ); scene.add( spotLight ); // 光源 end 同时将cube的材质从MeshBasicMaterial换为MeshLamberMaterial,由于最基本的MeshBasicMaterial材质对光源不会有任何反应。
// 物体 var geometry = new THREE.BoxGeometry(1, 1, 1); var material = new THREE.MeshLambertMaterial( { color: 0x00ff00} ); var cube = new THREE.Mesh( geometry, material ); scene.add( cube ); // 物体 end
4 添加阴影效果 为了渲染阴影效果,须要对代码作以下修改:
renderer.setClearColor(new THREE.Color(0x000000, 1.0)); renderer.shadowMap.enabled = true; 同时要给立方体设置投射阴影:
cube.castShadow = true; 设置地面接受阴影:
plane.receiveShadow = true; 设置spotLight投射阴影:
spotLight.castShadow = true; 为了添加阴影效果,咱们须要设置一个平面来接受阴影,所以从新建立一个场景,源码以下:
dawn1 3D body { margin: 0; } canvas { width: 100%; height: 100%; }渲染结果以下图:
好多色调都是须要本身去慢慢调的,反正调的本身舒服就好啦。 因此嘛,Come on together!