회전 방식
1) 고정된 물체의 축을 전역 좌표의 z축과 동일하게 만든다.(x축회전(alpha만큼), y축회전(beta만큼))
2) z축에 대해 원하는 만큼 회전
3) 거꾸로 회전시켜 제자리로 복귀한다. (y축회전(-beta 만큼), x축회전(-alpha 만큼))
/*원하는 모델 축을 전역좌표계의 z축과 동일하게 만들기 위한 x축 회전각, y축 회전각을 구한다.*/
//x축 alpha 회전, y->0//
alpha = atan2(y, z);
//물체의 x축을 alpha 만큼 회전시킨다.//
x1 = x;
y1 = y * cos(alpha) - z * sin(alpha);
z1 = y * sin(alpha) + z * cos(alpha);
//y축 beta 회전, x->0//
beta = atan2(-x1, z1);
/****
<회전 방식>
1) 고정된 물체의 축을 전역 좌표의 z축과 동일하게 만든다.(x축회전(alpha만큼), y축회전(beta만큼))
2) z축에 대해 원하는 만큼 회전
3) 거꾸로 회전시켜 제자리로 복귀한다. (y축회전(-beta 만큼), x축회전(-alpha 만큼))
****/
double x, y, z, x1, y1, z1;
for (int i = 1; i <= NodeCount; i++) {
x = model[i].x;
y = model[i].y;
z = model[i].z;
//x축 alpha 회전, y -> 0//
x1 = x;
y1 = y * cos(alpha) - z * sin(alpha);
z1 = y * sin(alpha) + z * cos(alpha);
//y축 beta회전, x -> 0//
x = x1 * cos(beta) + z1 * sin(beta);
y = y1;
z = -x1 * sin(beta) + z1 * cos(beta);
//z축 원하는 만큼 회전//
x1 = x * cos(angle) - y * sin(angle); //x좌표값
y1 = x * sin(angle) + y * cos(angle); //y좌표값
z1 = z; //z좌표값
//y축 -beta 회전//
x = x1* cos(-beta) + z1 * sin(-beta);
y = y1;
z = -x1 * sin(-beta) + z1 * cos(-beta);
//x축 -alpha 회전//
x1 = x;
y1 = y * cos(-alpha) - z * sin(-alpha);
z1 = y * sin(-alpha) + z * cos(-alpha);
model[i].x = x1;
model[i].y = y1;
model[i].z = z1;
}
'◼️OpenGL' 카테고리의 다른 글
[OpenGL] 도형 선택해서 값 읽어오기 (0) | 2023.09.12 |
---|---|
[OpenGL] 투명 도형 그리기 (0) | 2023.09.11 |
[OpenGL] 종횡비 조절 및 물체 형태가 변하지 않게 평행이동 (0) | 2023.09.04 |
MFC 마우스 이동으로 OpenGL 화면 회전 값 받기 (1) | 2023.05.19 |
OpenGL x, y, z축 회전 후 좌표값 구하기 (0) | 2023.05.19 |