threejs:axesHelper、Object3D、position和简单机器人

  • AxesHelper可以在场景中显示坐标系,坐标轴的颜色为RGB,分别对应XYZ;参数代表坐标轴长度。

var axesHelper = new THREE.AxesHelper( 500 );
scene.add( axesHelper );

  • Object3D

Object3D是所有物体的基类,里面包含很多方法

  • position

position可以设置某个物体的位置,obj.position.set(x,y,z);也可以使用上面的translate方法设置位置,都是相对于原点的平移。

  • 创建新物体。创建新物体即是创建多个不同的mesh,加入到场景中即可

下面为一个创建简单机器人的例子

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>第一个three.js文件_WebGL三维场景</title>
  <style>
    body {
      margin: 0;
      overflow: hidden;
    }
  </style>
  <script src="three.js"></script>
  <script src="OrbitControls.js"></script>
</head>

<body>
  <script>
    /**
     * 创建场景对象Scene
     */
    var scene = new THREE.Scene();
    /**
     * 创建网格模型
     */
    // var geometry = new THREE.SphereGeometry(60, 40, 40); //创建一个球体几何对象
    /************************body****************************/
    var geometry = new THREE.BoxGeometry(100,200,120); //创建一个立方体几何对象Geometry
    var material = new THREE.MeshLambertMaterial({
      color: 0x000ff0
    }); //材质对象Material
    var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
    scene.add(mesh); //网格模型添加到场景中

	/************************head****************************/
    var geometry1 = new THREE.SphereGeometry(50,40,40); //创建一个立方体几何对象Geometry
    var material1 = new THREE.MeshLambertMaterial({
      color: 0xff0000
    }); //材质对象Material
    var mesh1 = new THREE.Mesh(geometry1, material1); //网格模型对象Mesh
    mesh1.translateY(150);
    scene.add(mesh1); //网格模型添加到场景中

   	/************************hand-left****************************/
    var geometry2 = new THREE.BoxGeometry(30,100,30); //创建一个立方体几何对象Geometry
    var material2 = new THREE.MeshLambertMaterial({
      color: 0x00ff00
    }); //材质对象Material
    var mesh2 = new THREE.Mesh(geometry2, material2); //网格模型对象Mesh
    mesh2.translateZ(80);
    mesh2.translateY(20);
    scene.add(mesh2); //网格模型添加到场景中

   	/************************hand-right****************************/
    var geometry3 = new THREE.BoxGeometry(30,100,30); //创建一个立方体几何对象Geometry
    var material3 = new THREE.MeshLambertMaterial({
      color: 0x00ff00
    }); //材质对象Material
    var mesh3 = new THREE.Mesh(geometry3, material3); //网格模型对象Mesh
    mesh3.translateZ(-80);
    mesh3.translateY(20);
    scene.add(mesh3); //网格模型添加到场景中

    /************************foot-left****************************/
    var geometry4 = new THREE.BoxGeometry(40,130,40); //创建一个立方体几何对象Geometry
    var material4 = new THREE.MeshLambertMaterial({
      color: 0x00ff00
    }); //材质对象Material
    var mesh4 = new THREE.Mesh(geometry4, material4); //网格模型对象Mesh
    mesh4.translateZ(-30);
    mesh4.translateY(-170);
    scene.add(mesh4); //网格模型添加到场景中

    /************************foot-right****************************/
    var geometry5 = new THREE.BoxGeometry(40,130,40); //创建一个立方体几何对象Geometry
    var material5 = new THREE.MeshLambertMaterial({
      color: 0x00ff00
    }); //材质对象Material
    var mesh5 = new THREE.Mesh(geometry5, material5); //网格模型对象Mesh
    mesh5.translateZ(30);
    mesh5.translateY(-170);
    scene.add(mesh5); //网格模型添加到场景中

    var axesHelper = new THREE.AxesHelper( 500 );
	scene.add( axesHelper );
    /**
     * 光源设置
     */
    //点光源
    var point = new THREE.PointLight(0xffffff);
    point.position.set(400, 200, 300); //点光源位置
    scene.add(point); //点光源添加到场景中
    //环境光
    var ambient = new THREE.AmbientLight(0x000000);
    scene.add(ambient);
    // console.log(scene)
    // console.log(scene.children)
    /**
     * 相机设置
     */
    var width = window.innerWidth; //窗口宽度
    var height = window.innerHeight; //窗口高度
    var k = width / height; //窗口宽高比
    var s = 500; //三维场景显示范围控制系数,系数越大,显示的范围越大
    //创建相机对象
    var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
    camera.position.set(200, 0, 0); //设置相机位置
    camera.lookAt(scene.position); //设置相机方向(指向的场景对象)
    /**
     * 创建渲染器对象
     */
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(width, height);//设置渲染区域尺寸
    renderer.setClearColor(0xb9f3ff, 1); //设置背景颜色
    document.body.appendChild(renderer.domElement); //body元素中插入canvas对象
    //执行渲染操作   指定场景、相机作为参数
 //    renderer.render(scene, camera);
 //    function render() {
	//  	renderer.render(scene,camera);//执行渲染操作
	// }
	// render();
	// var controls = new THREE.OrbitControls(camera,renderer.domElement);//创建控件对象
	// controls.addEventListener('change', render);//监听鼠标、键盘事件
	function render() {
	  renderer.render(scene,camera);//执行渲染操作
	  // mesh.rotateY(0.01);//每次绕y轴旋转0.01弧度
	  requestAnimationFrame(render);//请求再次执行渲染函数render
	}
	render();
	var controls = new THREE.OrbitControls(camera,renderer.domElement);//创建控件对象
	// 已经通过requestAnimationFrame(render);周期性执行render函数,没必要再通过监听鼠标事件执行render函数
	// controls.addEventListener('change', render)
  </script>
</body>
</html>

 

posted @ 2020-02-09 21:51  昨夜昙花  阅读(242)  评论(0)    收藏  举报