OpenGL

[OpenGL] 주전자(Teapot) 그리기, 도형 회전 시키기, 도형 이동 시키기

Let it out 2024. 2. 16. 19:45

주전자(Teapot) 그리기

glutWireTeapot() 함수를 사용 해 주전자를 그려준다.
#include <GL/freeglut.h>

void draw(void)
{
  glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//배경 색  
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glColor4f(0.0f, 0.0f, 1.0f, 1.0f);//사물 색 설정

  glutWireTeapot(0.5);//주전자 그리기, 사이즈          

  glFlush();
}


int main(int argc, char** argv)
{
  glutInit(&argc, argv);

  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
  glutInitWindowPosition(800, 200);
  glutCreateWindow("Example");

  glutDisplayFunc(draw);

  glutMainLoop();
}


 

 

실행 결과

 
 

 

주전자 회전 시키기

rotatef() 함수를 이용해 주전자를 회전 시킨다.
 
OpenGL은 오른손 법칙을 사용한다.
 
자신이 생각하는 각도와 다를 수 있으므로 잘 생각해야 한다.
#include <GL/freeglut.h>

void draw(void)
{
  glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//배경 색  
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glColor4f(0.0f, 0.0f, 1.0f, 1.0f);//사물 색 설정

  glRotatef(30, 0, 0, 1);// z축으로 30도 회전
  glutWireTeapot(0.3);//주전자 그리기, 사이즈          

  glFlush();
}


int main(int argc, char** argv)
{
  glutInit(&argc, argv);

  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
  glutInitWindowPosition(800, 200);
  glutCreateWindow("Example");

  glutDisplayFunc(draw);

  glutMainLoop();
}
 
 

실행 결과

Z축으로 30도 회전했다.

 

 
 

 

주전자 이동 시키기

glTranslatef() 함수를 사용해 이동 시키면 된다.
 
주전자를 y축 기준 위로 이동시켰다.
#include <GL/freeglut.h>

void draw(void)
{
  glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//배경 색  
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glColor4f(0.0f, 0.0f, 1.0f, 1.0f);//사물 색 설정

  glTranslatef(0.0f , 0.7f, 0.0f);
  glutWireTeapot(0.3);//주전자 그리기, 사이즈          

  glFlush();
}

int main(int argc, char** argv)
{
  glutInit(&argc, argv);

  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
  glutInitWindowPosition(800, 200);
  glutCreateWindow("Example");

  glutDisplayFunc(draw);

  glutMainLoop();
}

 
 

실행 결과

가운데 있던 주전자가 위로 이동했다.

 

 
 


주전자 여러 개 그리기

위에서 배운 glTranslatef(), glRoatef() 함수를 활용하면 여러 주전자를 그릴 수 있다.
#include <GL/freeglut.h>

void draw(void)
{
  glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//배경 색  
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glColor4f(0.0f, 0.0f, 1.0f, 1.0f);//사물 색 설정

  glTranslatef(-0.5f , 0.7f, 0.0f);
  glutWireTeapot(0.3);//주전자 그리기, 사이즈          

  glTranslatef(0.0f, -0.7f, 0.0f);
  glutWireTeapot(0.3);//주전자 그리기, 사이즈          

  glTranslatef(0.8f, 0.0f, 0.0f);
  glRotatef(180, 0, 1, 0);// y축으로 30도 회전
  glutWireTeapot(0.3);//주전자 그리기, 사이즈          

  glFlush();
}

int main(int argc, char** argv)
{
  glutInit(&argc, argv);

  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
  glutInitWindowPosition(800, 200);
  glutCreateWindow("Example");

  glutDisplayFunc(draw);

  glutMainLoop();
}

 

실행 결과

 

 

 

반응형

'OpenGL' 카테고리의 다른 글

[OpenGL] 줌 인, 줌 아웃 구현하기  (0) 2024.02.18
[OpenGL] 도형 애니메이션 만들기  (1) 2024.02.17
[OpenGL] 점(point) 그리기  (0) 2024.02.15
[OpenGL] 선 그리기  (0) 2024.02.14
[OpenGL] 사각형, 삼각형 그리기  (1) 2024.02.13