在Three.js中,要渲染物体到网页中,咱们须要3个组建:场景(scene)、相机(camera)和渲染器(renderer)。有了这三样东西,才能将物体渲染到网页中去。程序员
建立这三要素的代码以下:浏览器
var scene = new THREE.Scene(); // 场景 |
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);// 透视相机 |
var renderer = new THREE.WebGLRenderer(); // 渲染器 |
renderer.setSize(window.innerWidth, window.innerHeight); // 设置渲染器的大小为窗口的内宽度,也就是内容区的宽度 |
document.body.appendChild(renderer.domElement); //将画布添加到body当中,在页面上显示 |
在Threejs中场景就只有一种,用THREE.Scene来表示,要构件一个场景也很简单,只要new一个对象就能够了,代码以下:app
var scene = new THREE.Scene();dom
场景是全部物体的容器,若是要显示一个苹果,就须要将苹果对象加入场景中。ide
另外一个组建是相机,相机决定了场景中那个角度的景色会显示出来。相机就像人的眼睛同样,人站在不一样位置,抬头或者低头都可以看到不一样的景色。函数
场景只有一种,可是相机却又不少种。和现实中同样,不一样的相机肯定了呈相的各个方面。好比有的相机适合人像,有的相机适合风景,专业的摄影师根据实际用途不同,选择不一样的相机。对程序员来讲,只要设置不一样的相机参数,就可以让相机产生不同的效果。spa
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000); |
最后一步就是设置渲染器,渲染器决定了渲染的结果应该画在页面的什么元素上面,而且以怎样的方式来绘制。这里咱们定义了一个WebRenderer渲染器,代码以下所示:对象
var renderer = new THREE.WebGLRenderer(); |
renderer.setSize(window.innerWidth, window.innerHeight); |
document.body.appendChild(renderer.domElement); |
注意,渲染器renderer的domElement元素,表示渲染器中的画布,全部的渲染都是画在domElement上的,因此这里的appendChild表示将这个domElement挂接在body下面,这样渲染的结果就可以在页面中显示了。blog
那如今,咱们将一个物体添加到场景中:游戏
var geometry = new THREE.CubeGeometry(1,1,1); |
var material = new THREE.MeshBasicMaterial({color: 0x00ff00}); |
var cube = new THREE.Mesh(geometry, material); |
scene.add(cube); |
代码中出现了THREE.CubeGeometry,THREE.CubeGeometry是一个几何体,CubeGeometry是一个正方体或者长方体,到底是什么,由它的3个参数所决定。
CubeGeometry(width, height, depth, segmentsWidth, segmentsHeight, segmentsDepth, materials, sides) |
width:立方体x轴的长度
height:立方体y轴的长度
depth:立方体z轴的深度,也就是长度
想想你们就明白,以上3个参数就可以肯定一个立方体。
渲染应该使用渲染器,结合相机和场景来获得结果画面。实现这个功能的函数是
renderer.render(scene, camera);
渲染函数的原型以下:
render( scene, camera, renderTarget, forceClear )
各个参数的意义是:
scene:前面定义的场景
camera:前面定义的相机
renderTarget:渲染的目标,默认是渲染到前面定义的render变量中
forceClear:每次绘制以前都将画布的内容给清除,即便自动清除标志autoClear为false,也会清除。
渲染有两种方式:实时渲染和离线渲染 。
function render() { |
cube.rotation.x += 0.1; |
cube.rotation.y += 0.1; |
renderer.render(scene, camera); |
requestAnimationFrame(render); |
} |
其中一个重要的函数是requestAnimationFrame,这个函数就是让浏览器去执行一次参数中的函数,这样经过上面render中调用requestAnimationFrame()函数,requestAnimationFrame()函数又让rander()再执行一次,就造成了咱们一般所说的游戏循环了。
Three.js中的场景是一个物体的容器,开发者能够将须要的角色放入场景中,例如苹果,葡萄。同时,角色自身也管理着其在场景中的位置。
相机的做用就是面对场景,在场景中取一个合适的景,把它拍下来。
渲染器的做用就是将相机拍摄下来的图片,放到浏览器中去显示。他们三者的关系以下图所示: