일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 색상변경
- 필기후기
- 갈자신이없다
- 마우스클릭
- 보라카이
- 멜버른
- 빅데이터분석기사후기
- 오류
- OpenGL
- 파이썬
- 애니메이션
- 빅데이터분석기사필기
- 정말
- 빅데이터분석기사
- 데이터전처리
- BeautifulSoup
- 언제또가보지
- 예쁜곳
- 크롤링
- selenium
- 가고싶은데
- 방향변경
- 청청구역
- 유니코드 제거
- 너무오래됐다
- 호주
- 사각형변형
Archives
- Today
- Total
wisdiom 아니고 wisdom
[실습 12] 원의 경로를 따라 이동/회전하는 애니메이션 구현 (미완성) 본문
#include <gl/glut.h>
#include <math.h>
#include <stdio.h>
void DrawSecne();
void Reshape(int w, int h);
void TimerFunction(int value);
void Keyboard(unsigned char key, int x, int y);
bool isSquare = false;
bool isMove = false;
float angleZ = 0;
float sizeX = 1.0;
float sizeY = 1.0;
static int fps = 500;
int w, h;
int main()
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(800, 600);
glutCreateWindow("practice_12");
glutDisplayFunc(DrawSecne);
glutKeyboardFunc(Keyboard);
glutTimerFunc(fps, TimerFunction, 1);
glutReshapeFunc(Reshape);
glutMainLoop();
}
void DrawSecne()
{
glClear(GL_COLOR_BUFFER_BIT);
//초기화
glLoadIdentity();
//좌표축
glBegin(GL_LINES);
glVertex3f(-100.0, 0.0, 0.0);
glVertex3f(100.0, 0.0, 0.0);
glVertex3f(0.0, -100.0, 0.0);
glVertex3f(0.0, 100.0, 0.0);
glEnd();
// 원 궤도
glBegin(GL_LINE_LOOP);
for (int degree = 0; degree < 360; degree += 1)
{
float radian = (float)degree * 3.141592f / 180.f;
glVertex2f(cos(radian) * 50, sin(radian) * 50);
}
glEnd();
glMatrixMode(GL_MODELVIEW);
//사각형
if (isSquare == true)
{
glPushMatrix();
glTranslatef(0.0f, 50.0f, 0.0f);
glTranslatef(0.0f, -50.0f, 0.0f);
glScalef(sizeX, sizeY, 1.0f);
glRotatef(angleZ, 0.0f, 0.0f, 1.0f); //z축회전
glRectf(-7.0f, 35.0f, 7.0f, 65.0f);
glPopMatrix();
if (isMove == true)
{
glPushMatrix();
}
}
else
{
// 삼각형
glPushMatrix();
glTranslatef(0.0f, 50.0f, 0.0f);
glTranslatef(0.0f, -50.0f, 0.0f);
glScalef(sizeX, sizeY, 1.0f);
glRotatef(angleZ, 0.0f, 0.0f, 1.0f);//z축회전
glBegin(GL_TRIANGLES);
glVertex2f(7.0, 35.0);
glVertex2f(-7.0, 35.0);
glVertex2f(0.0, 65.0);
glEnd();
glPopMatrix();
}
glutSwapBuffers();
}
void Reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-100.0, 100.0, -100.0, 100.0, -100.0, 100.0);
glMatrixMode(GL_MODELVIEW);
}
void TimerFunction(int value)
{
glutPostRedisplay();
angleZ += 10;
if (sizeX == 1)
{
sizeX += 0.2;
sizeY += 0.2;
}
else
{
sizeX = 1;
sizeY = 1;
}
glutTimerFunc(fps, TimerFunction, 1);
}
void Keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 'q': //사각형
isSquare = true;
break;
case 't': //삼각형
isSquare = false;
break;
case 'd': //그냥 이동
isMove = true;
default:
break;
}
}
📍 도형 종류 - 삼각형, 사각형
📍 키보드 명령어에 따른 경로 - 사인 곡선, 회오리, 지그재그, 경로 그리기
반응형
'👩💻 > OpenGL' 카테고리의 다른 글
[실습 15] 태양계 애니메이션 (0) | 2021.06.30 |
---|---|
[실습 14] 도형 2개 그리기 및 변환하기 (0) | 2021.06.30 |
[실습 11] 화면에 사인, 코사인, 스프링, 직사각형 그리기 (0) | 2021.06.30 |
[실습 05] 실습 04 변형 - 사각형 튀기기 (0) | 2021.06.30 |
[실습 04] 사각형 변형 애니메이션 만들기 (색상, 방향) (0) | 2021.06.30 |