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();
}
실행 결과

반응형