日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

threejs指南针【控制中心计算角度】

發布時間:2024/3/12 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 threejs指南针【控制中心计算角度】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

threejs指南針

  • 前言
  • 一、實現原理
  • 二、計算夾角
  • 三、旋轉圖片
  • 四、代碼整合


前言

提示:明確指南針的公式
效果:


提示:以下是本篇文章正文內容,下面案例可供參考

一、實現原理

實現思路:傳統的計算相機到控制中心的夾角來控制2D的圖片進行旋轉,達到指南針的效果。

二、計算夾角

場景中添加指南針,一般在場景中添加指南針,并不是一直以場景中心(0,0,0)為中心點。
用戶很大程度上會拖動場景,或場景中添加的有相機漫游之類的操作,不可能一直依靠相機坐標去計算角度。
根據 反正切三角函數 atan2(x,y),結合三維場景y軸向上,忽略y軸。
所以 atan2(x,z) 只需要x的坐標和z的坐標。
求得相機相對于控制中心的相對坐標。只需要將(相機坐標 - 控制中心坐標)

const dirx = camera.position.x - controls.target.x const dirz = camera.position.z - controls.target.z

套入反正切函數求得角度

// 注意:后邊*180/Math.PI是用于計算角度的 // 反正切函數atan只會得出結果,不會求得角度 // 但是這種視瀏覽器而定,有些瀏覽器封裝的有角度算法,只需要Math.atan2(dirx, dirz)即可 // 后續 +140 這個值是用來偏移角度的,默認以 z軸 的負方向為正北。 // 大多數視場景位置而定。偏移140即代表以右下角為正北方向 const theta = Math.atan2(dirx, dirz)*180/Math.PI + 140;

三、旋轉圖片

剩下的就是,根據角度直接操作圖片dom的style旋轉即可

const compass = document.getElementById('compass') compass.style.transform = 'rotateZ('+ theta +'deg)';

四、代碼整合

直接將上述整合添加到render里實時渲染即可
指南針跟隨視角而變化

render(){requestAnimationFrame(render)update()renderer.render( scene, camera )const dirx = camera.position.x - controls.target.xconst dirz = camera.position.z - controls.target.z// 可加入判斷,根據不同的場景偏差偏移角度if(dmgroup.visible === true){const theta = Math.atan2(dirx, dirz)*180/Math.PI + 140const compass = document.getElementById('compass')compass.style.transform = 'rotateZ('+ theta +'deg)'} else {const theta = Math.atan2(dirx, dirz)*180/Math.PI + 100const compass = document.getElementById('compass')compass.style.transform = 'rotateZ('+ theta +'deg)'} }

總結

以上是生活随笔為你收集整理的threejs指南针【控制中心计算角度】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。