第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

鼠標(biāo)/畫布X,Y到Three.js世界X,Y,Z

鼠標(biāo)/畫布X,Y到Three.js世界X,Y,Z

我一直在尋找一個與我的用例相匹配的例子,卻找不到一個。我正在嘗試將屏幕鼠標(biāo)坐標(biāo)轉(zhuǎn)換為考慮到相機的3D世界坐標(biāo)。解決方案我發(fā)現(xiàn)所有人都做射線交叉以實現(xiàn)對象拾取。我想要做的是將Three.js對象的中心定位在鼠標(biāo)當(dāng)前“結(jié)束”的坐標(biāo)上。我的相機位于x:0,y:0,z:500(雖然它會在模擬過程中移動)并且我的所有物體都在z = 0時具有不同的x和y值,所以我需要知道世界X,Y為基礎(chǔ)假設(shè)az = 0表示跟隨鼠標(biāo)位置的對象。這個問題看起來像一個類似的問題,但沒有解決方案:在THREE.js中獲取鼠標(biāo)相對于3D空間的坐標(biāo)給定屏幕上的鼠標(biāo)位置,其范圍為“左上角= 0,0 |右下角= window.innerWidth,window.innerHeight”,任何人都可以提供將Three.js對象移動到鼠標(biāo)坐標(biāo)的解決方案沿z = 0?
查看完整描述

3 回答

?
萬千封印

TA貢獻(xiàn)1891條經(jīng)驗 獲得超3個贊

您不需要在場景中有任何對象來執(zhí)行此操作。


你已經(jīng)知道相機的位置了。


使用vector.unproject( camera )你可以獲得指向你想要的方向的光線。


您只需要從攝像機位置延伸該光線,直到光線尖端的z坐標(biāo)為零。


你可以這樣做:


var vec = new THREE.Vector3(); // create once and reuse

var pos = new THREE.Vector3(); // create once and reuse


vec.set(

    ( event.clientX / window.innerWidth ) * 2 - 1,

    - ( event.clientY / window.innerHeight ) * 2 + 1,

    0.5 );


vec.unproject( camera );


vec.sub( camera.position ).normalize();


var distance = - camera.position.z / vec.z;


pos.copy( camera.position ).add( vec.multiplyScalar( distance ) );

變量pos是3D空間中的點的位置,“鼠標(biāo)下方”和平面中的位置z=0。


編輯:如果您需要“在鼠標(biāo)下”和平面中的點z = targetZ,請將距離計算替換為:


var distance = ( targetZ - camera.position.z ) / vec.z;

three.js r.98


查看完整回答
反對 回復(fù) 2019-08-31
  • 3 回答
  • 0 關(guān)注
  • 965 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號