반응형
주전자(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 |