上一面讲述了向场景中添加物体对象。这一篇准备把每一个功能点细细的讲述一遍,一方面是为了加深本身的理解。另外一方面但愿可以javascript
帮助到有须要的人。html
1、在学习WEBGL的时候,你应该先了解要建立一个WebGL程序须要哪些步骤。就跟弄梅菜扣肉同样,须要哪些步骤。java
这是一个面向过程编程。然而three.js不同,是一个面向对象编程。主要构建三个对象 scene(场景) camera(相机) renderer(渲染器).。git
这三个东西是什么意思呢?听起来彻底不懂是啥。举个小列子:就拿电影来讲。场景(scene)就比如整个布局空间,相机(camera)至关于编程
拍摄期。而渲染器至关于(renderer)把拍摄的电影转换成胶卷也就是电脑的屏幕。api
场景和空间包含了3D和数据模型,而renderer包含了着色器和WebGL绘图上下文。浏览器
2、THREE.JS建立场景,相机,渲染器缓存
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Demo1(three入门第一篇)</title> </head> <body> </body> <script type="text/javascript" src="js/three.js"></script> <script type="text/javascript"> var width = window.innerWidth, height = window.innerHeight; var scene = new THREE.Scene(); //建立一个场景 var camera = new THREE.PerspectiveCamera(75,width/height,1,5000); //建立相机 /* three.js建立相机的方式有不少种,其中最长用的是PerspectiveCamera(); 远景相机,至关于人眼观察模式 确定有人会有疑问,这几个参数是什么意思呢? 第一个 75 是 视角 width / height 相机拍摄面的长宽比,别问为何这么写,我也没搞清楚。反正设置为窗口 的width/height图形就不会被压变形。 下面两个是近裁剪面。和远裁剪面。 */ var renderer = new THREE.WebGLRenderer(); //s上一篇用的是CSS3DRenderer //WebGLrenderer实际上是用CANVAS渲染。 renderer.setSize(width,height); document.getElementsByTagName('body')[0].appendChild(renderer.domElement); </script> </html>
电影,场景,胶卷都准备好了,那如何才能展现演员呢?也就是上面一篇说 的如何向场景中添加物体对象呢?安全
3、添加演员(3D立方体)。app
//演员进场 var geometry = new THREE.BoxGeometry(1,1,1); //BoxGeometry(); 3D盒子模型。包含了立方体全部顶点和填充面的对象。 var material = new THREE.MeshBasicMaterial({color:'red'}); //有个几何模型,咱们须要材料为其上色。咱们采用的时候 网孔基础材料MeshBasicMaterial(); var mesh = new THREE.Mesh(geometry,material); //须要一个网孔,来承载几何模型和材料 scene.add(mesh); //把这个网孔放置到场景中去。 camera.position.z = 5; //调节相机的位置。 renderer.render(scene,camera); //把画面转换成相机,并播放
这样这个演员就入镜了。
4、如何让这个演员动起来呢?
//懂动起来。 function loop(){ requestAnimationFrame(loop); mesh.rotation.x += 0.1; //X选择 mesh.rotation.y += 0.1; //Y旋转 renderer.render(scene,camera); //把画面转换成相机,并播放 } loop(); //解释下requestAnimationFrame这个api /* requestAnimationFrame这个函数,它用来替代 setInterval, 这个新接口具有多个优势, 好比浏览器Tab切换后中止渲染以节约资源、 和屏幕刷新同步避免无效刷新、在不支持该接口的浏览器中能安全回退为setInterval。 简直就是动画神奇 */
演员入镜,并有了,打动效果。第一个小短篇算完成了吧。
5、整个代码(原本想托管到githup上)。发现太慢了。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Demo1(three入门第一篇)</title> </head> <body> </body> <script type="text/javascript" src="js/three.js"></script> <script type="text/javascript"> var width = window.innerWidth, height = window.innerHeight; var scene = new THREE.Scene(); //建立一个场景 var camera = new THREE.PerspectiveCamera(75,width/height,1,5000); //建立相机 /* three.js建立相机的方式有不少种,其中最长用的是PerspectiveCamera(); 远景相机,至关于人眼观察模式 确定有人会有疑问,这几个参数是什么意思呢? 第一个 75 是 视角 width / height 相机拍摄面的长宽比,别问为何这么写,我也没搞清楚。反正设置为窗口 的width/height图形就不会被压缩。 下面两个是近裁剪面。和远裁剪面。 */ var renderer = new THREE.WebGLRenderer(); //s上一篇用的是CSS3DRenderer //WebGLrenderer实际上是用CANVAS渲染。 renderer.setSize(width,height); document.getElementsByTagName('body')[0].appendChild(renderer.domElement); //演员进场 var geometry = new THREE.BoxGeometry(1,1,1); //BoxGeometry(); 3D盒子模型。包含了立方体全部顶点和填充面的对象。 var material = new THREE.MeshBasicMaterial({color:'red'}); //有个几何模型,咱们须要材料为其上色。咱们采用的时候 网孔基础材料MeshBasicMaterial(); var mesh = new THREE.Mesh(geometry,material); //须要一个网孔,来承载几何模型和材料 scene.add(mesh); //把这个网孔放置到场景中去。 camera.position.z = 5; //调节相机的位置。 //懂动起来。 function loop(){ requestAnimationFrame(loop); mesh.rotation.x += 0.1; //X选择 mesh.rotation.y += 0.1; //Y旋转 renderer.render(scene,camera); //把画面转换成相机,并播放 } loop(); //解释下requestAnimationFrame这个api /* requestAnimationFrame这个函数,它用来替代 setInterval, 这个新接口具有多个优势, 好比浏览器Tab切换后中止渲染以节约资源、 和屏幕刷新同步避免无效刷新、在不支持该接口的浏览器中能安全回退为setInterval。 简直就是动画神奇 */ </script> </html>
6、在WebGL中three.js扮演了重要的角色,然而中文api真的少。只有一个一个的慢慢累积。