簡體   English   中英

如何在旋轉場景中找到對象的全局位置THREE.JS

[英]How to Find global position of objects in a rotating scene THREE.JS

我正在研究一個3D網格操縱器: http//leapmotion.com 到目前為止,我已經能夠通過“抓住”並移動它們來操縱這些點,但是我現在希望能夠旋轉網格並在相反的面上工作。 我所做的是添加一個名為'可旋轉'的額外對象,如下所示:

scene=new THREE.Scene();
camera = new THREE.PerspectiveCamera(70,window.innerWidth/window.innerHeight,1,8000)
renderer=new THREE.WebGLRenderer( { clearColor: 0x000000, clearAlpha: 1, maxLights:5 } )


//This is the 'Mesh Scene'
rotatable = new THREE.Object3D()
scene.add(rotatable)


//Mesh we are altering
var material = new THREE.MeshNormalMaterial()
material.side=2

var geom = new THREE.SphereGeometry(200,10,10); 
var sphere = new THREE.Mesh(geom, material)

rotatable.add(sphere)

然后我試圖改變這個球體的頂點,但為了做到這一點,我需要做一個“碰撞測試”,以便看看頂點是否被“抓住”這包括檢查頂點位置並查看它是否與一個頂點重合您的手指位置(下面的psuedoCode)

if(finger.x == vertex.x && finger.y == vertex.y && finger.z == vertex.z){
    vertex.grabbed = true 
}

這在可旋轉的旋轉為零時工作正常,但是當它開始旋轉時,碰撞測試仍將測試未旋轉的頂點位置(這是有意義的)。 我的問題是如何在“場景/全局”位置找到頂點的位置。 到目前為止,我能想到的唯一方法是計算'可旋轉'的旋轉並使用此向量來計算新的頂點位置。

我對數學一無所知,所以這可能不是要走的路,即使是這樣,我也要努力奮斗,以至於我不知道我是不是只是錯誤地做數學,或者這不是我應該怎樣計算它。 顯然我願意完成這項工作,但只是想確保這是實現它的方法,而不是另一種更簡單的方法。

如果對代碼有任何其他問題,請告訴我,並提前感謝您的時間!

艾薩克

要獲取在局部坐標中指定的頂點的世界位置,請將對象的世界變換應用於頂點,如下所示:

vertex.applyMatrix4( object.matrixWorld );

(我對leapmotion不熟悉,所以希望它不影響這個答案。)

提示:不再需要maxLights 最好避免使用material.side = 2 請改用material.side = THREE.DoubleSide

你可以在這里找到常量: https//github.com/mrdoob/three.js/blob/master/src/Three.js

three.js r.55

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM