three.js学习

601 阅读3分钟

第一天:最基础建模知识点

先上代码(转自大佬博客):

<!DOCTYPE html>
<html lang="en">
<head>
       <meta charset="UTF-8">
        <title>Title</title>
        <style>
           body{
               margin: 0;
               overflow: hidden;//隐藏body窗口区域滚动条
           }
       </style>
       <!--引入three.js三维引擎-->
      <script src="./three.min.js"></script>
   </head>
 <body>
  <script>
      /**
         * 创建场景对象
       */
      var scene=new THREE.Scene();
      /**
       * 创建网格模型
       */
      var box=new THREE.BoxGeometry(50,50,50);//创建一个立方体几何对象
      var material=new THREE.MeshLambertMaterial({color:0xff3040});//材质对象
      var mesh=new THREE.Mesh(box,material);//网格模型对象
      scene.add(mesh);//网格模型添加到场景中
      /**
       * 光源设置
       */
      //点光源
      var point=new THREE.PointLight(0xffffff);
      point.position.set(100,200,300);//点光源位置
      scene.add(point);//点光源添加到场景中
      //环境光
      var ambient=new THREE.AmbientLight(0x444444);
      scene.add(ambient);
      /**
       * 相机设置
       */
      var width = window.innerWidth;//窗口宽度
      var height = window.innerHeight;//窗口高度
      var k = width/height;//窗口宽高比
      var s = 100;//三维场景缩放系数
      //创建相机对象
      var camera=new THREE.OrthographicCamera(-s*k,s*k, s,-s,1,1000);
      camera.position.set(200,300,200);//设置相机位置
      camera.lookAt(scene.position);//设置相机方向(指向的场景对象)
      /**
       * 创建渲染器对象
       */
      var renderer=new THREE.WebGLRenderer();
      renderer.setSize(width,height);
      renderer.setClearColor(0xb9d3ff,1);//设置背景颜色
      document.body.appendChild(renderer.domElement);//body元素中插入canvas对象
      //执行渲染操作
      renderer.render(scene,camera);
  </script>

看一下效果图:

image.png

这就是一个最最基础的建模,当然这个正方体也可以换成球形等..

解析一下代码(菜鸡理解):

首先引入three.js,
链接是:www.yanhuangxueyuan.com/threejs/bui…

基础的三步骤:

1.创建场景对象:

①网格模型立方体 ②光源(从哪个地方光照过来)

2.相机

3.创建渲染器渲染操作

image.png

1.首先第一步是创建场景对象,就和创建实例对象一样

var scene = new THREE.Scene()

这个场景后面会add添加很多元素,包括模型和光源这些。

场景里需要一个3D模型体,这时候就要用到

var box = new THREE.BoxGeometry(50,50,50)

这相当于创建了一个正方体模型,当然你也可以参照官方API中的 TextGeometry 字体模型 还有 SphereGeometry 球模型等,大家可以去官网看看,还是蛮有意思的, 这里就先用立方体模型,对后面的理解有帮助。

模型中的参数就是尺寸大小,分别代表X轴,Y轴,和Z轴(X轴就是浏览器右手的方向,Y轴是浏览器向上的方向,Z轴是浏览器左手的方向),比如增大第一个参数就会让模型左右宽度增大,第二个参数就会让上下宽度变大

其次是材质对象

var material = new THREE.MeshLambertMaterial({color: 0xff3040,emissive:0x0000ff})

除了最基础的color属性,还有很多例如emissive材质本身发光颜色,贴图等属性

mesh网格模型对象(将3D模和材质放进去)

var mesh=new THREE.Mesh(box,material);

还有就是光源和环境光,光源指从一个点发出光来照亮3D模型,环境光就是模型整体亮度,先构造实例对象

var point = new THREE.PointLight(0xffffff)

参数是光源的颜色,

var ambient = new THREE.AmbientLight(0x444444)

参数是亮度(递增)

然后设置光源的位置

point.position.set(100,200,300)

参数是Y,Z,X轴方向射来光线的位置,像是X轴的值最大,就从X轴方向的光线最强,这个面就越亮,其他面就会越暗

设置好后把他们add添加到场景对象中

scene.add(mesh);//网格模型添加到场景中

scene.add(point);//点光源添加到场景中

scene.add(ambient);//点环境光添加到场景中

var ambient=new THREE.AmbientLight(0x444444);

2.相机(即正事3D模型的视角)

创建相机实例对象

var camera=new THREE.OrthographicCamera( left : Number, right : Number, top : Number, bottom : Number, near : Number, far : Number );

left — 摄像机视锥体左侧面。 right — 摄像机视锥体右侧面。 top — 摄像机视锥体上侧面。 bottom — 摄像机视锥体下侧面。 near — 摄像机视锥体近端面。 far — 摄像机视锥体远端面。

camera.position.set(200,200,200);//设置相机位置 即从哪个位置看3D模型

camera.lookAt(scene.position);//设置相机方向(指向的场景对象)

3.创建渲染器对象,进行渲染操作

var renderer=new THREE.WebGLRenderer();

设置尺寸

renderer.setSize(width,height);

body元素中插入canvas对象

document.body.appendChild(renderer.domElement);

执行渲染操作,render上面的场景和相机

renderer.render(scene,camera);

这样一个最最最简单的3D模型图就建好了,是不是很简单呢(狗头保命)