[OpenGL] OpenGL 주전자 그리기, 회전하기

OpenGL 주전자(Teapot) 그리기, 회전하기


주전자 그리기

기본적인 주전자 1개 그리기 예제
#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도 회전했다.




주전자 이동 시키기

주전자를 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();
}


실행 결과




댓글

이 블로그의 인기 게시물

[Arduino] 아두이노 초음파 센서(HC-SR04) 사용하기

[Arduino] 아두이노 조이스틱 사용하기

[자연 환경] 농약의 장단점 농약이 환경과 인간에게 미치는 영향