2016-12-05 10 views
0

私は、threejs.jsonシーンをインポートして表示するTHREEJSの例(https://threejs.org/examples/webgl_loader_fbx.html)から撮影したシーンを持っています。シーンはうまく動作します。グリッドがあり、グリッドの上にモデルが配置されています。THREEJSでカメラの焦点を既存のオブジェクトに変更するにはどうすればよいですか?

マウスをドラッグしてズームすると、カメラが画面の中央を指しています。しかし、モデルはシーンの最下部にあるため、カメラの外にあることがよくあります。

カメラの中心を配置したモデルに設定するにはどうすればよいですか?

私はcamera.lookAt(new THREE.Vector3(0, 0, 0))を追加しようとしましたが、値を変更してもカメラの中心とは何の違いもありませんでした。以下は

私のコードです:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>three.js webgl - FBX loader</title> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> 
     <style> 
      body { 
       font-family: Monospace; 
       background-color: #000; 
       color: #fff; 
       margin: 0px; 
       overflow: hidden; 
      } 
      #info { 
       color: #fff; 
       position: absolute; 
       top: 10px; 
       width: 100%; 
       text-align: center; 
       z-index: 100; 
       display:block; 
      } 
      #info a, .button { color: #f00; font-weight: bold; text-decoration: underline; cursor: pointer } 
     </style> 
    </head> 

    <body> 
     <div id="info"> 
      Test 
     </div> 

     <script src="js/three.js"></script> 

     <script src="js/controls/OrbitControls.js"></script> 

     <script src="js/loaders/FBXLoader.js"></script> 

     <script src="js/Detector.js"></script> 
     <script src="js/libs/stats.min.js"></script> 

     <script> 

      if (! Detector.webgl) Detector.addGetWebGLMessage(); 

      var container, stats, controls; 
      var camera, scene, renderer; 
      var w = 1920; 
      var h = 1080; 

      var clock = new THREE.Clock(); 

      var mixers = []; 

      init(); 

      function init() { 

       container = document.createElement('div'); 
       document.body.appendChild(container); 

       camera = new THREE.PerspectiveCamera(45, (window.innerWidth/window.innerHeight), 2, 2000); 

       scene = new THREE.Scene(); 

       // grid 
       var gridHelper = new THREE.GridHelper(14, 28, 0x303030, 0x303030); 
       gridHelper.position.set(0, - 0.04, 0); 
       scene.add(gridHelper); 

       // stats 
       stats = new Stats(); 
       container.appendChild(stats.dom); 

       // model 
       var manager = new THREE.LoadingManager(); 
       manager.onProgress = function(item, loaded, total) { 

        console.log(item, loaded, total); 

       }; 

       var onProgress = function(xhr) { 

        if (xhr.lengthComputable) { 

         var percentComplete = xhr.loaded/xhr.total * 100; 
         console.log(Math.round(percentComplete, 2) + '% downloaded'); 

        } 

       }; 

       var onError = function(xhr) { 
       }; 

       // BEGIN Clara.io JSON loader code 
       var objectLoader = new THREE.ObjectLoader(); 
       objectLoader.load("carport-scene.json", function (obj) { 
        scene.add(obj); 
       }); 
       // END Clara.io JSON loader code 

       renderer = new THREE.WebGLRenderer(); 
       renderer.setPixelRatio(window.devicePixelRatio); 
       renderer.setSize(window.innerWidth, window.innerHeight); 
       renderer.setClearColor(0x0000ff); 
       container.appendChild(renderer.domElement); 

       // controls, camera 
       controls = new THREE.OrbitControls(camera, renderer.domElement); 
       controls.target.set(0, 12, 0); 
       camera.position.set(25, 0, 25); 
       //camera.lookAt(new THREE.Vector3(100, 100, 100)); 
       controls.update(); 

       window.addEventListener('resize', onWindowResize, false); 

       animate(); 

      } 

      function onWindowResize() { 

       camera.aspect = window.innerWidth/window.innerHeight; 
       camera.updateProjectionMatrix(); 

       renderer.setSize(window.innerWidth, window.innerHeight); 

      } 

      // 

      function animate() { 

       requestAnimationFrame(animate); 

       if (mixers.length > 0) { 

        for (var i = 0; i < mixers.length; i ++) { 

         mixers[ i ].update(clock.getDelta()); 

        } 

       } 

       stats.update(); 

       render(); 

      } 

      function render() { 

       renderer.render(scene, camera); 

      } 

     </script> 

    </body> 
</html> 

私は問題を示すGIFを作成しました: http://g.recordit.co/APLcyJKj01.gif

答えて

0

controls.target.set(0, 0, 0);ラインを更新することにより、それを修正しました。これが回転制御のターゲットであるように見えます。あなたは、オブジェクトの位置を知っている場合

0

、その後は、また

controls.target = your_object.position; // or any THREE.Vector3() 

行うことができますanimation機能に

controls.update(); 

を追加

0

このコード作業:

camera.lookAt(new THREE.Vector3(0, 0, 0)); 
<script src="js/controls/OrbitControls.js"></script> 

を、そのライブラリーは、自動的によって与えられた位置に戻る:しかし、あなたが使用している

//x,y,z 
controls.target.set(0, 0, 0); 
関連する問題