threejs 限制物件只能在指定平面上拖拽

2022-07-04 08:15:08 字數 755 閱讀 8716

threejs提供有 dragcontroller.js的例子來輔助拖拽

該例子可以在基於當前螢幕的x和y軸上拖拽物體,但是它不能影響z軸。

檢視**,可以在touchstart\mousedown下找到下述**:

_plane.setfromnormalandcoplanarpoint( _camera.getworlddirection( _plane.normal ), _worldposition.setfrommatrixposition( _selected.matrixworld ) );
該**的意義在於:

1、要確定乙個目標平面(_plane),物件將會在該平面上移動

2、所以,利用滑鼠的clientx和clienty結合攝像機(_camera)的角度,得出向量1

3、同時,根據當前選中物件(_selected)的方向,得出向量2

4、最後,根據這兩個向量來確定目標平面

所以,如果要讓物件隨著拖拽在縱深方向移動,只需要把這個平面修改為你期望的平面即可。比如:

_plane.setfromnormalandcoplanarpoint(new three.vector3(0,0,1),new three.vector3(0,0,1));

即可實現在指定平面上移動的效果,以下物件都是通過拖拽修改的初始位置:

只能在堆上生成的物件 VS 只能在棧上生成的物件

1.只能在堆上 即禁止在棧上生成。如何實現?當物件建立在棧上面時,是由編譯器分配記憶體空間的,呼叫建構函式來構造棧物件。如果類的析構函式是私有的,則編譯器不會在棧空間上為類物件分配記憶體。所以,只需把類的析構函式宣告為private即可禁止該類在棧上生成物件。但是別忘了提供乙個public的函式用於...

只能在堆或棧上建立物件?

1.只能在堆 heap 上建立物件 禁止產生棧 stack 物件 建立棧物件時會移動棧頂指標以 挪出 適當大小的空間,再在這個空間上直接呼叫對應的建構函式以形成乙個棧物件,而當函式返回時會呼叫其析構函式釋放這個物件,再調整棧頂指標收回那塊棧記憶體 在這個過程中是不需要operator new del...

只能在棧上或者堆上建立的物件

今天在這裡面看到了這個題目,據說還是google面試題。總的思想,是把一些在棧上或者堆上面建立物件,所必須的函式設為private使得編譯報錯。比如 只能在堆上建立,不能在棧上建立。因為棧上的物件,總是要呼叫析構函式。所以把析構函式設為private,然後new出來的物件,顯式的呼叫delete就可...