minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️셸 스크립트 (0)
    • ◼️SQL (0)
    • ◼️React (0)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (12)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • OpenGL회전
  • 19년식그램램장착
  • 이것이C++이다책참고
  • 티스토리폰트배경색없애기
  • API문서정리
  • NextJSSwagger
  • 인공지능개발자
  • 구조체매개변수
  • 19년식그램SSD장착
  • SpringBootSwagger
  • mfc
  • GSLB
  • 이차원구조체배열포인터
  • hello테마
  • 리눅스파티션
  • 그램풀스팩업그레이드
  • kafka구축
  • AI배워야하나
  • 구조체배열포인터
  • 그램업그레이드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

OpenGL gluLookAt 카메라 회전 적용 (구에서 점의 회전 좌표 구하기)
◼️OpenGL

OpenGL gluLookAt 카메라 회전 적용 (구에서 점의 회전 좌표 구하기)

2023. 4. 29. 19:38

구에서 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)

  1. eyex, eyey, eyez:  카메라의 원점, 카메라의 위치
  2. atx, aty, atz: 카메라가 바라보는 좌표. 윈도우의 중앙으로 온다.
  3. upx, upy, upz: 카메라가 어떤 축을 기준으로 서있냐.
  4. (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);

 
참고: http://lusain.egloos.com/v/3175877

'◼️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

    티스토리툴바