用徑向slider實現模型旋轉時,得到的結果與ue編輯器里面的結果有很大出入。
問題應該是
兩個FRotator(0,10,0)和(10,20,30),
兩個FRotator的加法結果為:(10,30,30)
和實際上我想執行的操作——在(10,20,30)的基礎上執行(0,10,0)不一樣。
更具體的數學問題應該去參考歐拉角、四元數的概念。gpt說,根本原因是:歐拉角(Pitch, Yaw, Roll)不是線性空間里的量,旋轉本身是非線性的。四元數有很多好處,避免萬向節死鎖等。
解決辦法(參考deepseek和官方論壇):
設置絕對的旋轉為這個:
FRotator(B.Quaternion()*A.Quaternion())
A為原來的狀態、B為在原來狀態下的增量,B和A相乘的順序好像也有講究(四元數乘法問題)。當然slider可能也許要保存處理一下增量?(這個還沒查怎么搞,目前是用一個變量去存上一次的狀態的)。Ex:藍圖里有個合并Rotator的BP函數,但是cpp里面沒找到,推薦用上面的四元數的方法實現)