2、 建立3D场景的通常步骤

一、建立三大组建

在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中的场景是一个物体的容器,开发者能够将须要的角色放入场景中,例如苹果,葡萄。同时,角色自身也管理着其在场景中的位置。

相机的做用就是面对场景,在场景中取一个合适的景,把它拍下来。

渲染器的做用就是将相机拍摄下来的图片,放到浏览器中去显示。他们三者的关系以下图所示:

相关文章
相关标签/搜索