three.js 初步

2023-01-12 14:43:48 浏览数 (1)


这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战

我也是个初学者,大家就当这是我的笔记看,如果理解不正确请大家指正。首先推荐大家一个学习网站Tress.js中文网。 首先我们需要先引入tree.js

代码语言:javascript复制
链接:https://pan.baidu.com/s/1SLQL6RChecY8gE7e-Jfn1g  
密码:n4h8
代码语言:javascript复制
<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <title>My first three.js app</title>
        <style>
            body { margin: 0; }
            canvas { width: 100%; height: 100% }
        </style> 
    </head>
    <body>
    //根据文件的位置,我放在了跟html文件放到了js的统计目录
        <script src="js/three.js"></script> 
        <script>
            //我们主要渲染代码都写到这儿
        </script>
    </body>
</html>

这张图很重要,或许现在不理解等,读上代码就知道了

我们先往下看。

创建一个场景,我们需要以下几个对象:场景、相机和渲染器

  • 一个场景:把这个看做一个舞台,然后将所有需要的对象添加上去。
  • 一个相机:在这个案例中我们创建一个透视摄像机,但它也可能是投影相机。也就是我们拍摄物体的位置。
  • 一个渲染器:渲染器将会使用WebGL渲染场景中的所有的物体。
  • 一个或多个物体:如图的飞机和圆柱都是物体。它们分别在各自的网格模型(Mesh)当中。mesh需要包含几何体参数(几何体形状)和材质(包括:颜色、贴图、透明度)等参数。
代码语言:javascript复制
 var mesh = new THREE.Mesh(geometry,material);
  • 一个或多个光源:可以使用不同样式的光源。 注意xyz轴哦,有助于理解。

如图:

我们读段代码看看:效果是一个旋转的正方体

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <script type="text/javascript" src='../js/three.js'></script>
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      // 场景
      var scene = new THREE.Scene();
      // 立方体  参数分别是长宽高
      var geometry = new THREE.BoxGeometry(100,100,100);
      //材质 MeshLambertMaterial
      var material = new THREE.MeshLambertMaterial({
        color : 0x0000ff
      });
      //网格 包括几何体和材质(颜色,材质,透明度)
      var mesh = new THREE.Mesh(geometry,material);
      //网格 添加到场景
      scene.add(mesh);
      //
      var point = new THREE.PointLight(0xffffff);
      point.position.set(400,200,300);
      scene.add(point);
      //
      var ambient = new THREE.AmbientLight(0x444444);
      console.log(scene);
      // 屏幕的宽
      var width = window.innerWidth;
      // 屏幕的高
      var height = window.innerHeight;
      // 屏幕的宽高比
      var k = width/height;
      var s = 200; //三维场景显示范围控制系数,系数越大,显示的范围越大
    
    //创建一个相机,相机有多种。这里用的是OrthographicCamera
    //参数 1--视野角度 2--长宽比根据屏幕长宽 3--远剪切面 4--近剪切面
      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);
      function render(){
        requestAnimationFrame(render);
        renderer.render(scene,camera);
        mesh.rotation.x  =0.1;
        mesh.rotation.y  =0.2;
      }
      render();
    </script>
  </body>
</html>

scene:场景,就像拍摄现场的密闭空间,装着演员和摄像机。场景里包含着网格模型,每一个网格模型里有一个几何体,而几何体是不能被渲染的,只有几何体和材质结合成网格才能被渲染到屏幕上。如下代码就是这个意思。

代码语言:javascript复制
 var mesh = new THREE.Mesh(geometry,material);

再分别说一下几何体和材质: 几何体会有形状和尺寸属性,如下代码BoxGeometry是立方体,三个参数分别是长宽高,三个参数不相等就成了长方体了。

代码语言:javascript复制
 var geometry = new THREE.BoxGeometry(100,100,100);

既然有立方体还有什么别的几何体呢?

0 人点赞