Threejs模型 調整模型的視角

2021-09-28 11:34:03 字數 1753 閱讀 3175

x、y、z軸的位置

建立盒子 

modelbounds = new three.box3() // 建立乙個盒子

// 賦值為每乙個模型的構件的盒子 data

if (modelbounds.isempty()) else

思路是:假設相機位於模型的正上方,那麼相機相對於模型的兩邊的夾角相同,設定乙個夾角為60度,那麼可以知道相機此時的位置座標

var size = modelbounds.getsize() // 獲取到盒子的寬度,高度,深度

var center = modelbounds.getcenter() // 獲取到盒子的中心點位置

var max = modelbounds.max // 獲取盒子的最大的位置

var x = center.x

var y = center.y

var z = center.z + size.z / 2 // 使得到的點位置盒子的頂部

var zdis = math.tan(60 * math.pi / 180) * (math.sqrt(math.pow(max.x - x, 2) + math.pow(max.y - y, 2) + math.pow(max.z - z, 2))) // 根據三角公式去獲取相機位的z軸相對於盒子的距離

z += zdis // 我們想要俯視模型,那麼z軸的值應大於原來的

// 此時獲取到的(x, y, z)是俯視模型的位置,且位於模型正上方

想要設定俯仰角,也就是相機的位置與模型的中點'(此時z軸是位於盒子頂部)的夾角為所設定的角度

var theta = (180 - pitch) / 2 // pitch是所設定的俯仰角,因為相機位與模型構成等腰三角形,換算出其他的兩個角度

var dis = zdis * math.cos(theta * math.pi / 180) * 2 // 根據三角公式換算出第三邊

var ydelta = dis * math.sin(theta * math.pi / 180)

var zdelta = dis * math.cos(theta * math.pi / 180)

y += ydelta

z -= zdelta

// 此時只有y和z軸變化了,x軸不變

想要設定旋轉角度,此時只有z軸不變化,只改變x和y軸

var r = math.sqrt(math.pow(z - (center.z + size.z / 2), 2) + math.pow(y - center.y, 2) + math.pow(x - center.x, 2)) // 這是旋轉的園的半徑

var alpha = (180 - bearing) / 2 // 順時針旋轉的角度

var dis1 = r * math.cos(alpha * math.pi / 180) * 2

var ydelta1 = dis1 * math.cos(alpha * math.pi / 180)

var xdelta = dis1 * math.sin(alpha * math.pi / 180)

if (self.bearing <= 90) else

y -= ydelta1

threejs匯入json模型

其實現在的json模型有兩種格式。乙個是geometry型別,需要jsonloader載入 乙個是object型別,需要objectloader載入。1.geometry var js loader new three.jsonloader manager js loader.load models...

四 threejs 模型互動

射線類,用於檢測互動 const raycaster new raycaster 二維座標,需要轉換成空間座標 const vector2 new three.vector2 e為事件的物件 vector2.x e.clientx window.innerwidth 2 1 vetor2.y e.c...

torch模型調整

去掉注意力後,發現測試集準確率一直為0,這時要關注測試集上的損失函式是否下降,如果沒有下降,可能是學習率較大導致,需要調整模型學習率。例子 2,2,3 2,2,4 拼接為 2,2,7 embeds1維度為2 2 3,embeds2維度為2 2 7defembedding stack self,emb...