[心得] gimbal lock

看板Flash作者 (HsuanTang)時間12年前 (2012/02/09 20:10), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
魔術方塊 http://www.fileden.com/files/2012/2/3/3259292/MyGame/MagicCube.swf 總算不會越轉越花了.. 說明: 方向鍵:旋轉視角 zxcasdqwe:旋轉方塊 enter:一直按著可以洗牌 之前發現使用rotationY轉90度後 接下來再用rotationX跟rotationZ會變得很怪 這個現象叫gimbal lock 是euler angles本身的缺陷所造成的 而flash的rotationX, rotationY, rotationZ都是使用euler angles 如果只需要單軸旋轉的話 可以放心使用沒關係 但如果旋轉多軸 使用euler angles有可能會產生gimbal lock 使得旋轉不如預期 除了euler angles外 quaternion也可用來旋轉 而且quaternion不會像euler angles那樣有gimbal lock flash也有支援quaternion 例如: var vectors:Vector.<Vector3D> = sprite1.transform.matrix3D.decompose(Orientation3D.QUATERNION); 這樣就可以獲得sprite1目前的"移動","旋轉"及"縮放"的資訊 其中"旋轉"會以quaternion的方式呈現 對vectors稍加修改後 再存回去 sprite1.transform.matrix3D.recompose(vectors,Orientation3D.QUATERNION); 就可以藉此操控sprite1的"移動","旋轉"及"縮放"了 不過在decompose後 取得vectors中的quaternion值後 要如何對quaternion進行操作 flash好像還沒有提供相關的函式.. 我也不懂quaternion值是怎麼求來的 要如何修改.. google後找到了這個: Multiplying quaternions Multiplying q1 with q2 applies the rotation q2 to q1 原來只要把兩個quaternion相乘就可以旋轉了 我先把X轉1度的quaternion值存起來放rotX 以後誰要X轉 就把它乘rotX 它就會X轉1度了 同理rotY跟rotZ也是 試了一下 可以轉 而且不會產生gimbal lock了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.156.3

02/10 07:26, , 1F
gimbal lock的意思應該是"喪失一個旋轉自由度"吧
02/10 07:26, 1F

02/10 07:26, , 2F
之前那個花花的問題應該是因為matrix串接順序不對?
02/10 07:26, 2F
※ 編輯: HsuanTang 來自: 114.26.220.190 (02/11 20:52)

02/11 20:54, , 3F
"matrix串接順序"是什麼?
02/11 20:54, 3F
文章代碼(AID): #1FCxUyMb (Flash)