루빅스큐브 (27개의 작은 정육각형 블럭으로 구성된 퍼즐 장난감) 을 시뮬레이션 하는

간단한 opengl 프로그램을 만들고 있는데요..

각 블럭마다 3/3/3 행렬의 고유 원소값을 가지고 있고

이를 기반으로 퍼즐내의 자기 위치를 구성합니다 ( 슬라이스를 회전할 때 어떤 블럭들이 회전할지 알아야 하니까요)

문제는 이 블럭 하나가 처음 90도를 회전한 뒤에, 아직 회전하지 않은 블럭들과 함께 슬라이스가 구성이 되는데

이 상태에서 (아직회전하지 않은 블럭)+(한번 회전 한 블럭) 의 슬라이스를 회전시키면

이미 회전을 한번 한 녀석의 좌표계 기준으로 90도를 돌아버립니다.

사용자가 큐브를 x 축CW(clockwise) 방향으로 돌리고 싶어서 명령을 하면,

이미 한번 (예를들어 y 축으로) 회전 한 놈 기준으로는 x 축이 전역좌표계의 -z 축과 일치하므로

자기 기준으로 돌아버리니 같은 x 축 CW 명령이라도 사용자 시점에서

이미 회전을 했던 3블럭은 전역좌표계의 -z을 기준으로, 나머지 6블럭은 기존의 x 축 기준으로 회전하게 되어

슬라이스가 깨지는 (사실 전체 큐브가 깨지는) 현상이 발생합니다.


그래서 해법을 고민하다가 두가지 방법을 생각해 냈는데요

1. 회전이 끝나면 전역좌표계와 지역좌표계를 일치시켜준다

2. 회전을 할 때마다 회전량을 저장할 변수를 지정하고, 이 변수에 따라 매 회전 명령마다 이후 회전할 값을 보정해준다

이상인데요

1번은 방법을 모르겠습니다. 내장함수에서 지원하는 방법이 있는건지 몇시간씩 구글링 해봐도

지역좌표계 초기화 관련해서만 나오는데 glMatrixMode 를 초기화 다음에 한번 더 부르면 화면 자체가 깨져버리고요

2번의 경우는 머리가 돌지를 않네요; 번쩍번쩍 생각나는 것들은 어찌보면 간단한데 돌려볼때마다 새로운 문제에 봉착하고..

그래서 혹시 레임에 같은 고민을 하시는 분이나 해결하셨거나 해법을 아시는 분이 있을까 해서 질문을 올려 봅니다.