便利,查找某个模型对象

  1. 经常在开发过程中,我们需要查找某个组,或者场景中的某个对象,那么可以通过id或者name调用getObjectById或者getObjectByName进行查找,调用方可以是场景,例如:
  1. scene.getObjectByName('beline')

这样就是在整个场景中查找name为beline的模型对象.这个时候就可以通过获取到该对象进一步设置
例如,我们把获取到的对象修改一个颜色,需要注意的是,在改变模型的属性后记得调用渲染函数.

修改模型属性

  1. let belineobj = scene.getObjectByName('beline')
  2. console.log(belineobj, 'belineobj')
  3. belineobj.material.color.set(0xffffff);
  4. render();

完整代码

从下面代码中我们可以看出,初始化的3D方块的颜色为蓝色,在渲染过后查找到该模型对象,设置颜色为白色.由于我们在render函数中持续渲染该场景,因此最后我们肉眼看到的是一个白色的盒子

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>OrbitControls 鼠标控制交互</title>
  6. <style>
  7. body {
  8. margin: 0;
  9. overflow: hidden;
  10. /* 隐藏body窗口区域滚动条 */
  11. }
  12. </style>
  13. <!--引入three.js三维引擎-->
  14. <script src="./js-r100/three.js"></script>
  15. <script src="./js-r100/controls/OrbitControls.js"></script>
  16. </head>
  17. <body>
  18. <script>
  19. /**
  20. * 创建场景对象Scene
  21. */
  22. var scene = new THREE.Scene();
  23. /**
  24. * 创建网格模型
  25. */
  26. // var geometry = new THREE.SphereGeometry(60, 40, 40); //创建一个球体几何对象
  27. var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
  28. var material = new THREE.MeshLambertMaterial({
  29. color: 0x0000ff
  30. }); //材质对象Material
  31. var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
  32. mesh.name = "beline"
  33. scene.add(mesh); //网格模型添加到场景中
  34. /**
  35. * 光源设置
  36. */
  37. //点光源
  38. var point = new THREE.PointLight(0xffffff);
  39. point.position.set(400, 200, 300); //点光源位置
  40. scene.add(point); //点光源添加到场景中
  41. //环境光
  42. var ambient = new THREE.AmbientLight(0x444444);
  43. scene.add(ambient);
  44. /**
  45. * 相机设置
  46. */
  47. var width = window.innerWidth; //窗口宽度
  48. var height = window.innerHeight; //窗口高度
  49. var k = width / height; //窗口宽高比
  50. var s = 200; //三维场景显示范围控制系数,系数越大,显示的范围越大
  51. //创建相机对象
  52. var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
  53. camera.position.set(200, 300, 200); //设置相机位置
  54. camera.lookAt(scene.position); //设置相机方向(指向的场景对象)
  55. /**
  56. * 创建渲染器对象
  57. */
  58. var renderer = new THREE.WebGLRenderer();
  59. renderer.setSize(width, height);//设置渲染区域尺寸
  60. renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
  61. document.body.appendChild(renderer.domElement); //body元素中插入canvas对象
  62. //- 渲染函数
  63. function render() {
  64. //执行渲染操作 指定场景、相机作为参数
  65. renderer.render(scene, camera);
  66. requestAnimationFrame(render)
  67. }
  68. render();
  69. //- 添加鼠标对视觉相机的操作
  70. let controls = new THREE.OrbitControls(camera);
  71. //监听鼠标事件,触发渲染函数,更新canvas画布渲染效果
  72. // controls.addEventListener('change', render, { passive: true });
  73. let belineobj = scene.getObjectByName('beline')
  74. console.log(belineobj, 'belineobj')
  75. belineobj.material.color.set(0xffffff);
  76. </script>
  77. </body>
  78. </html>