2015-06-19 104 views
1

X3DOM是否具有實現自定義相機導航的正確方法?我想在用戶拖動縮放滑塊時進行縮放,並在用戶拖動屏幕時進行平移。 X3DOM是否有調用pan(),zoom()或rotate()函數的API?X3DOM自定義導航

到目前爲止,我能想到的三種解決方法,這是不理想的解決方案:

  1. 改變觀點手動屬性:

    document.getElementById("the_viewpoint").setAttribute("orientation", "some numbers here");

  2. 保持固定的觀點,改變位置/包含整個3d世界的<transform>的旋轉

  3. 個重返賽事。例如,當用戶滑動縮放滑塊時,觸發鼠標滾輪事件進行縮放。

+0

希望做同樣的事情。你有沒有想過這個? –

+0

不完全。 X3DOM具有「檢查」和「轉盤」導航模式。我的解決方案在它們之間切換,並使用一個平移和另一個旋轉。 – user2939415

回答

0

貌似this functionality was added fairly recently,但has yet to be properly documented

公關包括下面的例子:

var d = function(selector) { return document.querySelector(selector)} 

x3dom.runtime.ready = function() { 
    var x3d = d('x3d'); 
    var viewpoint = d('viewpoint'); 
    var x3dCanvas = x3d.runtime.canvas; 

    var _onMouseWheel = x3dCanvas.onMouseWheel; 

    x3dCanvas.onMouseWheel = function(event) { 
     if(event.altKey) { 
      var offset = .01 
      var fov = parseFloat(viewpoint.getAttribute('fieldofview')) || 1.571; 

      if(event.wheelDelta < 0) offset = -offset; 
      fov = Math.min(2, Math.max(0, fov+offset)); 

      viewpoint.setAttribute('fieldofview', fov) 

     } else { 
      _onMouseWheel.call(this, event); 
     } 
    } 

    x3dCanvas.canvas.removeEventListener('mousewheel', _onMouseWheel); // unable to unbind when handler is anonymous function 
    x3dCanvas.canvas.addEventListener('mousewheel', x3dCanvas.onMouseWheel); 
} 
+0

這應該照顧縮放,但是對於平移和旋轉的實現仍然是一個懸而未決的問題。 – user2939415