구에서 x,y,축회전했을 때의 좌표
α : y 회전 값, β : x 회전 값 이라고 했을 때 점P의 좌표값은 P (d cosα cosβ, d sinα, d cosα sinβ) 이다.
원리는 아래 이미지를 참고하면 이해가 될 것입니다.

선분 OB의 값: d cosα
B (d cosα cosβ, 0, d cosα sinβ) 가 된다.
P의 y좌표: d sinα
P (d cosα cosβ, d sinα, d cosα sinβ)
α : y 회전 값, β : x 회전 값
OpenGL 시점 좌표계 설정에 구의 회전 좌표 적용!
시점 좌표계설정 GLU함수: gluLookAt(eyex,eyey,eyez, atx,aty,atz, upx, upy, upz)
- eyex, eyey, eyez: 카메라의 원점, 카메라의 위치
- atx, aty, atz: 카메라가 바라보는 좌표. 윈도우의 중앙으로 온다.
- upx, upy, upz: 카메라가 어떤 축을 기준으로 서있냐.
- (0,1,0) : y축을 기준으로 서있음. (1,1,0): z축 기준 45도 돌린 방향으로 서 있음
*시점좌표계 : 카메라의 시점 설정
1. 사용자가 x,y축 회전 값을 설정한다.
xAngle = x 회전각
yAngle = y 회전각
2. 카메라의 위치에 구의 P좌표값을 적용한다. (r: 물체로부터 카메라를 떨어뜨릴 거리)
eyex : r * cos(yAngle) * cos(xAngle)
eyey : r * sin(yAngle)
eyez : r * cos(yAngle) * sin(xAngle)
3. 카메라가 바라보는 좌표는 물체의 원점(0,0,0)으로 설정한다.
atx : 0
aty : 0
atz : 0
4. 기본 y축 양의 방향(1)을 기준으로 카메라를 서있게 한다.
* eyez가 음수가 나왔을 때는 y축 음의 방향(-1)을 기준으로 서있도록 바꿔줘야 회전이 자연스럽게 된다.
eyes가 음수가 나올 때
- y축 양의 방향(1): 좌우가 전환된다. 반대방향에 바로 서서 물체를 보는 것이 되기 때문.
- y축 음의 방향(-1): 카메라를 거꾸로 한상태로 전환되면서 회전화면서 좌우를 그대로 볼 수있다.
double xx = 10 * cos(yAngle) * cos(xAngle);
double yy = 10 * sin(yAngle);
double zz = 10 * cos(yAngle) * sin(xAngle);
int yoption = 1;
if ((cos(yAngle)>0 && sin(xAngle)) < 0 ||
(cos(yAngle)<0 && sin(xAngle)) > 0) {
yoption = -1;
}
gluLookAt(xx, yy, zz, 0, 0, 0, 0, yoption, 0);
'◼️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 |