ホームページ  >  記事  >  ウェブフロントエンド  >  軌道制御プラグイン (軌道制御) を使用してモデルの相互作用を制御する Three.js の詳細な説明

軌道制御プラグイン (軌道制御) を使用してモデルの相互作用を制御する Three.js の詳細な説明

巴扎黑
巴扎黑オリジナル
2018-05-10 17:30:0016672ブラウズ

この記事では主に、Orbit Controls プラグインを使用した Three.js (つまり、モデルの相互作用を制御する Orbit Control) に関する関連情報をサンプル コードを通じて詳しく紹介します。この記事は、誰にとっても一定の参照と学習価値があります。友達の皆さん、以下を見てみましょう。

推奨マニュアル: JavaScript 中国語リファレンスマニュアル

はじめに

この記事では主に、Orbit Controls プラグイン (Orbit Control) を使用してモデルの相互作用を制御する Three.js に関する関連コンテンツを紹介します。この効果は8章のトラックボールプラグインと比べると、トラックボールプラグインは前後に回転できるものの、上下左右の関係が分かりやすくなっています。混同しやすいため、デバッグに適していますが、軌道制御プラグイン Orbit は、混乱を招くような影響はありません。以下でその使用法について説明しましょう。

(1) まずプラグインを導入します。ファイルアドレスは公式の場合、examples/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) 最後に、animate 関数内で orbit の 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クイックスタート_翡翠少女般若心経シリーズ

以上が軌道制御プラグイン (軌道制御) を使用してモデルの相互作用を制御する Three.js の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。