Three.js开发笔记——场景初探

Three.js 是一款运行在浏览器中的 3D 引擎,我们可以用它在 web 中创建各种三维场景,包括了摄影机、光影、材质等各种对象。使用它可以让我们更加直观的了解 webgl 的世界。

一、搭建HTML框架,导入libs




  Example 01.01 - Basic skeleton
  
  



二、Three.js三要素

1、场景(Scene)

场景(Scene)是一个容器,主要用于保存、跟踪所要渲染的物体和使用的光源。
一个场景想要显示任何东西,必须要添加摄像机(Camera)、光源和对象。这将在第三部分进行介绍。
下面来添加一个场景(Scene)

var scene = new THREE.Scene();

2、摄像机(Camera)

摄像机(Camera)决定了能够在场景中看到什么
下面来定义一个摄像机(Camera)及其坐标

var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.x = 30;
camera.position.y = 20;
camera.position.z = 40;
camera.lookAt(scene.position);

其中用到了PerspectiveCamera(fov, aspect, near, far)

  • fov 可视角度
  • aspect 为width/height,通常设置为canvas元素的高宽比。
  • near近端距离
  • far远端距离
    只有离相机的距离大于near值,小于far值,且在相机的可视角度之内,才能被相机投影到。

3、渲染器(renderer)

顾名思义,渲染器(renderer)是将观察到的场景渲染到浏览器中。
下面来定义一个渲染器(renderer),并设置它的背景色和尺寸大小

var renderer = new THREE.WebGLRenderer();
renderer.setClearColor(new THREE.Color(0xEEEEEE));
renderer.setSize(window.innerWidth, window.innerHeight);

三、为场景添加元素

1、添加光源

这里添加一个点光源

var spotLight = new THREE.SpotLight(0xffffff); //定义一个点光源,并设置颜色
spotLight.position.set(40, 60, 40); //设置点光源坐标
spotLight.castShadow = true;
scene.add(spotLight);

2、添加一个辅助坐标轴

var axes = new THREE.AxisHelper(20);
scene.add(axes);

3、添加一个物体

这里添加一个使用MeshLambertMaterial材质的长方体

var sphereGeometry = new THREE.SphereGeometry(6, 4, 4); // 创建一个长方体
var sphereMaterial = new THREE.MeshLambertMaterial({color: 0xff0000});// 创建一个材质
var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial); // 构造一个球体并附着材质
sphere.position.x = 0; //设置球体的x轴坐标
sphere.position.y = 4; //设置球体的x轴坐标
sphere.position.z = 0; //设置球体的x轴坐标
scene.add(sphere);

4、添加一个辅助平面(可选)

var planeGeometry = new THREE.PlaneGeometry(40, 20);
var planeMaterial = new THREE.MeshBasicMaterial({color: 0xcccccc});
var plane = new THREE.Mesh(planeGeometry, planeMaterial);
plane.rotation.x = -0.5 * Math.PI;
plane.position.x = 0;
plane.position.y = 0;
plane.position.z = 0;
scene.add(plane);

四、输出

接下来使用渲染器来输出建模结果

document.getElementById("WebGL-output").appendChild(renderer.domElement);
renderer.render(scene, camera);

可以看到我们的建模结果如图所示


Github链接:https://github.com/JayneJing/ThreeJs-test/blob/master/threejs-1.html

参考资料:《Three.js开发指南》

你可能感兴趣的:(Three.js开发笔记——场景初探)