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)
    • ◼️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)

블로그 메뉴

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

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️OpenGL

[OpenGL] 모델의 특정축을 고정하여 회전

2023. 9. 12. 16:02


회전 방식

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

    티스토리툴바