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...