>  기사  >  웹 프론트엔드  >  모델 상호 작용을 제어하기 위해 궤도 제어 플러그인(궤도 제어)을 사용하는 Three.js에 대한 자세한 설명

모델 상호 작용을 제어하기 위해 궤도 제어 플러그인(궤도 제어)을 사용하는 Three.js에 대한 자세한 설명

巴扎黑
巴扎黑원래의
2018-05-10 17:30:0016660검색

본 글에서는 궤도 제어 플러그인, 즉 모델 상호 작용을 제어하기 위한 궤도 제어를 사용하는 Three.js에 대한 관련 정보를 주로 소개하며, 누구나 참고할 수 있고 학습할 가치가 있는 샘플 코드를 통해 자세히 소개합니다. . 친구 여러분, 아래를 살펴보겠습니다.

추천 매뉴얼: JavaScript 중국어 참조 매뉴얼

머리말

이 글은 주로 궤도 제어 플러그인(궤도 제어)을 사용하여 모델 상호 작용을 제어하는 ​​Three.js에 대한 관련 내용을 소개합니다. 이 효과 섹션 8의 트랙볼 플러그인과 비교하면 사용감이 더 좋습니다. 트랙볼 플러그인은 앞뒤로 굴러갈 수 있지만 상하좌우의 관계를 쉽게 구분할 수 있으며, 혼동되기 쉽습니다. 디버깅에 적합하며, 궤도 제어 플러그인 궤도는 혼란스러운 효과가 없습니다. 아래에서 그 용도에 대해 이야기해 보겠습니다.

(1) 먼저 플러그인을 소개해주세요. 공식적인 경우 파일 주소는 example/js/controls/OrbitControls.js 입니다.

(2) 그런 다음 함수를 인스턴스화하고 카메라와 렌더러의 DOM을 전달하고 관련 설정을 지정합니다.

//用户交互插件 鼠标左键按住旋转,右键按住平移,滚轮缩放 
 var controls; 
 function initControls() { 
 
  controls = new THREE.OrbitControls( camera, renderer.domElement ); 
 
  // 如果使用animate方法时,将此函数删除 
  //controls.addEventListener( 'change', render ); 
  // 使动画循环使用时阻尼或自转 意思是否有惯性 
  controls.enableDamping = true; 
  //动态阻尼系数 就是鼠标拖拽旋转灵敏度 
  //controls.dampingFactor = 0.25; 
  //是否可以缩放 
  controls.enableZoom = true; 
  //是否自动旋转 
  controls.autoRotate = true; 
  //设置相机距离原点的最远距离 
  controls.minDistance = 200; 
  //设置相机距离原点的最远距离 
  controls.maxDistance = 600; 
  //是否开启右键拖拽 
  controls.enablePan = true; 
 }

(3) 마지막으로 애니메이션 기능 내에서 궤도의 update()update를 호출합니다.

function animate() { 
  //更新控制器 
  controls.update(); 
  render(); 
 
  //更新性能插件 
  stats.update(); 
  requestAnimationFrame(animate); 
 }

관련 효과를 얻었습니다.

다음은 모두 사례 코드입니다.

 
 
 
  
 Title 
  
 
 
 
 
 
 
 
<script> 
 var renderer; 
 function initRender() { 
  renderer = new THREE.WebGLRenderer({antialias:true}); 
  renderer.setSize(window.innerWidth, window.innerHeight); 
  document.body.appendChild(renderer.domElement); 
 } 
 
 var camera; 
 function initCamera() { 
  camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 10000); 
  camera.position.set(0, 0, 400); 
 } 
 
 var scene; 
 function initScene() { 
  scene = new THREE.Scene(); 
 } 
 
 var light; 
 function initLight() { 
  scene.add(new THREE.AmbientLight(0x404040)); 
 
  light = new THREE.DirectionalLight(0xffffff); 
  light.position.set(1,1,1); 
  scene.add(light); 
 } 
 
 function initModel() { 
  var map = new THREE.TextureLoader().load("examples/textures/UV_Grid_Sm.jpg"); 
  var material = new THREE.MeshLambertMaterial({map:map}); 
 
  var cube = new THREE.Mesh(new THREE.BoxGeometry(100, 200, 100, 1, 1, 1), material); 
  scene.add(cube); 
 } 
 
 //初始化性能插件 
 var stats; 
 function initStats() { 
  stats = new Stats(); 
  document.body.appendChild(stats.dom); 
 } 
 
 //用户交互插件 鼠标左键按住旋转,右键按住平移,滚轮缩放 
 var controls; 
 function initControls() { 
 
  controls = new THREE.OrbitControls( camera, renderer.domElement ); 
 
  // 如果使用animate方法时,将此函数删除 
  //controls.addEventListener( &amp;#39;change&amp;#39;, render ); 
  // 使动画循环使用时阻尼或自转 意思是否有惯性 
  controls.enableDamping = true; 
  //动态阻尼系数 就是鼠标拖拽旋转灵敏度 
  //controls.dampingFactor = 0.25; 
  //是否可以缩放 
  controls.enableZoom = true; 
  //是否自动旋转 
  controls.autoRotate = true; 
  //设置相机距离原点的最远距离 
  controls.minDistance = 200; 
  //设置相机距离原点的最远距离 
  controls.maxDistance = 600; 
  //是否开启右键拖拽 
  controls.enablePan = true; 
 } 
 
 function render() { 
  renderer.render( scene, camera ); 
 } 
 
 //窗口变动触发的函数 
 function onWindowResize() { 
  camera.aspect = window.innerWidth / window.innerHeight; 
  camera.updateProjectionMatrix(); 
  render(); 
  renderer.setSize( window.innerWidth, window.innerHeight ); 
 
 } 
 
 function animate() { 
  //更新控制器 
  controls.update(); 
  render(); 
 
  //更新性能插件 
  stats.update(); 
  requestAnimationFrame(animate); 
 } 
 
 function draw() { 
  initRender(); 
  initScene(); 
  initCamera(); 
  initLight(); 
  initModel(); 
  initControls(); 
  initStats(); 
 
  animate(); 
  window.onresize = onWindowResize; 
 } 
</script> 
추천 관련 기사: ​ ​
1. three.js를 사용하여 프로젝트 만들기 ​ ​​
2.Three.js에서 echarts로 생성된 차트 적용에 대한 자세한 설명
관련 영상 추천:
1.JavaScript Quick Start_옥소녀심경 시리즈

위 내용은 모델 상호 작용을 제어하기 위해 궤도 제어 플러그인(궤도 제어)을 사용하는 Three.js에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.