E N D
첫번째 예제: Blue Background #include <GL/glut.h> /* includes gl.h glu.h */GLvoid drawScene ( GLvlid );void main( int argc, char *argv[] ){ // 초기화 함수들glutInitDisplayMode (GLUT_SINGLE | GLUT_RGBA); // 디스플레이 모드 설정glutInitPosition ( 100, 100 ); // 윈도우의 위치 지정glutInitWindowSize ( 250, 250 ); // 윈도우의 크기 지정glutCreateWindow( "Example1" ); // 윈도우 생성 (윈도우 이름) glutDisplayFunc( drawScene ); // 출력 함수의 지정 glutMainLoop();} GLvoid drawScene( GLvoid ) { glClearColor(0.0f, 0.0f, 1.0f, 1.0f); // 바탕색을 'blue' 로 지정 glClear( GL_COLOR_BUFFER_BIT ); // 설정된 색으로 전체를 칠하기glFlush(); // 화면에 출력하기}
두번째 예제:사각형 그리기 #include <GL/glut.h> /* includes gl.h glu.h */GLvoid drawScene( GLvoid )void main ( int argc, char *argv[] ) { //초기화 함수들 glutInitDisplayMode( GLUT_SINGLE | GLUT_RGBA ); // 디스플레이 모드 설정glutInitWindowPosition( 100, 100 ); // 윈도우의 위치지정 glutInitWindowSize ( 250, 250 ); // 윈도우의 크기 지정glutCreateWindow( "Example2" ); // 윈도우 생성 (윈도우 이름) glutDisplayFunc( drawScene ); // 출력 함수의 지정 glutMainLoop();} GLvoid drawScene( GLvoid ) { glClearColor(0.0f, 0.0f, 1.0f, 1.0f); // 바탕색을 'blue' 로 지정 glClear( GL_COLOR_BUFFER_BIT ); // 설정된 색으로 전체를 칠하기glColor4f(0.0f, 1.0f, 0.0f, 1.0f); // 그리기 색을 'green' 으로 지정 glRectf(-0.5f, -0.5f, 0.5f, 0.5f); // 사각형 그리기glFlush(); // 화면에 출력하기}
기본 도형 그리기 • 점, 선, 다각형, 등의 기본적인 도형 • glBegin(GL_POLYGON); glVertex2i (20, 100); // V1 glVertex2i (20, 20); // V2 glVertex2i (140, 20); // V3 glVertex2i (140, 100); // V4glEnd(); • 기본 출력요소의 속성 • glPointSize(size): 점의 크기 • glLineWidth(width): 선 굵기 • glLineStipple(factor,pattern): 점선 및 쇄선의 모양
변환 • OpenGL에서의 4가지 변환 • 뷰잉(Viewing) 변환 : 관측자의 시점(viewpoint)을 설정 • 모델링(Modeling) 변환 : 3차원 공간에서 그래픽스 객체의 이동, 신축, 회전 • 투영(Projection) 변환 : 3차원 그래픽스 객체를 2차원 평면으로 투영 • 뷰포트(Viewport) 변환 : 투영된 그림의 출력될 위치와 크기를 정의
변환 행렬 함수 • 기하변환 함수: 이동, 신축, 회전 • glTranslate3f(tx, ty, tz); • glScale3f(sx, sy, sz); • glRotate4f(angle, x, y, z); • 투영(Projection) • gluOrtho2D(left, right, bottom, top); // 직각투영 • gluPerspective(fovy, aspect, zNear, zFar); // 원근투영 • 뷰포트(Viewport)의 설정 : glViewport(x, y, width, height)
조명(Lights) • 조명모델 • 주변조명(Ambient Light) : 물체의 위치에 상관없이 고르게 비치는 빛 • 산란반사조명(Diffuse Light) : 빛의 방향으로 노출된 면이 밝아지는 조명 • 거울반사조명(Specular Light) : 특정 부분이 집중적으로 반사되는 빛
조명과 재질의 설정 • 조명의 설정 • 광원(Light Source)의 설정 : glEnable(GL_LIGHT0) 함수로 모드를 지정한 후, glLight() 함수에서 광원의 위치 및 색상값을 설정 • 재질(Material)의 설정 • glMaterial()에서 재질의 종류 및 해당하는 값을 설정 • Diffuse Reflection • Ambient Reflection • Specular Reflection • Emission • Shininess
텍스쳐 매핑(Texture Mapping) • 재질이나 질감을 나타내는 이미지를 3차원 물체의 표면에 입히는 작업
안개 효과(Fog Effect) • glFog(pname, param) 사용
그 밖에 주요 기능 • 곡면 그리기 • 3차원 객체의 은면 제거(Hidden Surface Removal)
곡면 그리기 • GLU에서 지원하는 곡면함수 • 원기둥 gluCylinder() • 원판 gluDisk() • 구 gluSphere() • 원뿔? • Nurbs
3차원 객체의 은면제거(Hidden Surface Removal) • 깊이검사(Depth Test) 설정 : 은면 제거 과정의 실행 • glEnable(GL_DEPTH_TEST) • glDisable(GL_DEPTH_TEST) • Culling 의 설정 : 다면체의 뒷면을 그리지 않는 기능 • glEnable(GL_CULL_FACE) • glDisable(GL_CULL_FACE)