渲染器、场景和照相机简介


本章简单介绍一下threejs中,关于渲染器(Renderer)、场景(Scene)和照相机(Camera)


1. 渲染器(Renderer)

渲染器主要功能是与HTML中的,Canvas元素进行绑定,以提供渲染的容器。如果在HTML中显式声明了Canvas元素:

  1. <canvas id="mainCanvas" width="400px" height="300px"></canvas>

那么显示的构建渲染器的方式为:

  1. var renderer=new THREE.WebGLRenderer({
  2. canvas:document.getElementById('mainCanvas')
  3. })

当然如果没有显式的声明,那么threejs也提供了默认添加渲染器的方式:

  1. var renderer=new THREE.WebGLRenderer();
  2. renderer.setSize(400,300);
  3. document.getElementById('body')[0].appendChild(renderer.domElement)

上述通过隐式声明的方式,同样也添加了一个渲染容器。renderer可以通过setColor方法设置渲染容器的背景色。

2. 场景(Scene)

我理解的场景,其实一个抽象的概念,就是存在于渲染容器中。渲染器渲染的是场景中的物体。对于场景,在场景初始化后,往场景中添加物体即可。

大致的过程为:物体——>添加到场景中——>场景——>渲染器渲染

Scene的初始化为:

  1. var scene=new THREE.Scene();

场景中添加:

  1. scene.add('一些物体')

3. 照相机(Camera)

物体在场景中是呈现在什么位置的,这与照相机有关,照相机的拍摄位置和拍摄角度,一定程度上决定了物体的表现形式。

介绍照相机之前,首先要明确在threejs中,所遵循的坐标系为右手坐标系:

右手坐标系

最后,先介绍一个在场景中添加一个长方体,并渲染的实验结果。

(1)定义照相机

  1. var camera = new THREE.PerspectiveCamera(45, 4 / 3, 1, 1000);
  2. camera.position.set(0, 0, 5);
  3. scene.add(camera);

(2)创建一个长方体添加到场景中

  1. var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3),
  2. new THREE.MeshBasicMaterial({
  3. color: 0xff0000
  4. })

); scene.add(cube);

构建的结果:

此处输入图片的描述

完整的代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>My first three.js app</title>
  8. <style>
  9. body { margin: 0; }
  10. canvas { width: 100%; height: 100% }
  11. #info {
  12. position: absolute;
  13. top: 10px;
  14. width: 100%;
  15. text-align: center;
  16. z-index: 100;
  17. display:block;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <canvas id="mainCanvas" width="400px" height="300px"></canvas>
  23. </body>
  24. <script src="https://cdn.bootcss.com/three.js/91/three.js"></script>
  25. <script>
  26. function init(){
  27. var renderer=new THREE.WebGLRenderer({
  28. canvas:document.getElementById('mainCanvas')
  29. });
  30. renderer.setClearColor(0x000000);
  31. //scene
  32. var scene=new THREE.Scene();
  33. //camera
  34. var camera=new THREE.PerspectiveCamera(45,4/3,1,1000);
  35. camera.position.set(0,0,5);
  36. scene.add(camera);
  37. //a cube
  38. var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3),
  39. new THREE.MeshBasicMaterial({
  40. color: 0xff0000
  41. })
  42. );
  43. scene.add(cube);
  44. // render
  45. renderer.render(scene, camera);
  46. }
  47. init();
  48. </script>