如何使用GLM完成魔方旋轉(zhuǎn)的編號重排

本文相當干貨碘梢,包含數(shù)學應(yīng)用技巧蜈块。

前些日子陷谱,老大讓各種小弟學習OpenGL渲染等等,一個主要的大作業(yè)就是用OpenGL繪制會旋轉(zhuǎn)的魔方鸥昏。

大體的思路就是畫三角形面=》兩個三角形面形成一個正方形面=》6個正方形面旋轉(zhuǎn)位移形成小立方體=》多個小立方體位移得到魔方

靜態(tài)的魔方繪制起來沒啥難度塞俱,但是要做隨機方向和層的魔方旋轉(zhuǎn),問題就出來了爬早。

假設(shè)只是2x2x2的2階魔方霉晕,設(shè)上層左上角的方塊編號為1厨内,上層順時針旋轉(zhuǎn)之后,編號1的方塊就到了編號為2的位置唯蝶。每次旋轉(zhuǎn)都需要重新設(shè)置方塊的編號,以便下次旋轉(zhuǎn)修改其模型矩陣遗嗽。

只是2階或者3階魔方的時候粘我,這種編號的重設(shè)可以窮舉解決。但是多階魔方的時候痹换,這種編號重設(shè)就難以找到規(guī)律進行簡化征字。

由此,我找了一種技巧娇豫,無論幾階魔方匙姜,都可以簡單輕松的重設(shè)編號,每次旋轉(zhuǎn)操作都可以找到對應(yīng)的魔方方塊锤躁。

招數(shù)就是方塊編號使用3維向量搁料。以下使用glm與C++代碼做為示例。并且用左手坐標系(z軸向上)系羞。

例如2階魔方中郭计,如果一個小方塊位于上層的右下角,那么給予其一個向量編號pos(1椒振,1昭伸,1),即(x軸正向為右澎迎,y軸正向朝外庐杨,z軸正向朝上)。那么以z軸為軸旋轉(zhuǎn)90度夹供,可以理解為對pos做旋轉(zhuǎn)操作灵份,以數(shù)學進行表達就是用旋轉(zhuǎn)矩陣叉乘pos向量。glm+C++代碼如下:

  glm::vec3 pos(1,1,1);
  glm::mat4 rotate_mat = glm::rotate(glm::mat4(1.0), glm::radians(90.0),  glm::vec3(0,0,1));
  pos = glm::vec3(rotate_mat * glm::vec4(pos, 1.0));

代碼運行之后哮洽,得到pos為(1,-1,1)之類的旋轉(zhuǎn)后的方塊編號填渠。不過由于有計算誤差的情況,有時候會得到(0.99999, -0.999999, 1)之類的,此時對每個xyz值做一個浮點值近似判斷就可以了氛什。

每一個方塊存儲一個pos向量作為位置編號莺葫,每次對方塊完成旋轉(zhuǎn)要重設(shè)編號的時候?qū)os做上述向量旋轉(zhuǎn)操作,這樣再次旋轉(zhuǎn)的時候就可以輕松的找到需要旋轉(zhuǎn)的對應(yīng)方塊了枪眉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捺檬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贸铜,更是在濱河造成了極大的恐慌堡纬,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒿秦,死亡現(xiàn)場離奇詭異隐轩,居然都是意外死亡,警方通過查閱死者的電腦和手機渤早,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門职车,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鹊杖,你說我怎么就攤上這事悴灵。” “怎么了骂蓖?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵积瞒,是天一觀的道長。 經(jīng)常有香客問我登下,道長茫孔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任被芳,我火速辦了婚禮缰贝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘畔濒。我一直安慰自己剩晴,他們只是感情好,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布侵状。 她就那樣靜靜地躺著赞弥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趣兄。 梳的紋絲不亂的頭發(fā)上绽左,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機與錄音艇潭,去河邊找鬼拼窥。 笑死承粤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的闯团。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼仙粱,長吁一口氣:“原來是場噩夢啊……” “哼房交!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伐割,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤候味,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后隔心,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體白群,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年硬霍,在試婚紗的時候發(fā)現(xiàn)自己被綠了帜慢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡唯卖,死狀恐怖粱玲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拜轨,我是刑警寧澤抽减,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站橄碾,受9級特大地震影響卵沉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜法牲,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一史汗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拒垃,春花似錦淹办、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谤牡,卻和暖如春副硅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翅萤。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工恐疲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腊满,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓培己,卻偏偏與公主長得像碳蛋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子省咨,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 筆者在《高效的多維空間點索引算法 — Geohash 和 Google S2》文章中詳細的分析了 Google S...
    一縷殤流化隱半邊冰霜閱讀 6,078評論 3 13
  • 變換(Transformations) 我們可以嘗試著在每一幀改變物體的頂點并且重設(shè)緩沖區(qū)從而使他們移動零蓉,但這太繁...
    IceMJ閱讀 4,106評論 0 1
  • 在所有益智游戲中敌蜂,魔方是當之無愧的王者箩兽。魔方從發(fā)明至今已風魔全球三十多年,人們卻一直樂此不疲章喉,不斷探索魔方提出的問...
    圖靈教育閱讀 8,690評論 5 24
  • 本章主要解決這個問題: 如何對物體進行位置變換汗贫? 想要操作物體的位置,我們就要使用數(shù)學工具對其位置進行計算秸脱。先來看...
    閃電的藍熊貓閱讀 10,937評論 15 13
  • 《并非情色》 詩/陳述 我記得曾經(jīng)有一份雪 在我心頭 如同女人含蓄的遮住體膚 幸福潔白而又樸素 當時代的風來臨 云...
    詩人陳述閱讀 291評論 4 14