OpenGL 발표일 : 2006. 11. 20 발표자 : 조윤혜
Context 1. OpenGL 라이브러리 등록 및 기본 2. 색상, 재질, 조명 3. Various Effect 4. Transformation
OpenGL이란? 그래픽 하드웨어에 대한 소프트웨어 인터페이스 (Open Graphics Library) 대화형 3차원 애플리케이션 제작가능 하드웨어 독립적(윈도우 관련작업이나 사용자 입력을 위한 사항은 포함되지 않음)
1. OpenGL 라이브러리 등록 및 기본
1.OpenGL 라이브러리 등록 File Location Gl.h Glut.h Glu.h [compiler]\include\gl Opengl32.lib Glut32.lib Glu32.lib [compiler]\lib Opengl32.dll Glut32.dll Glu32.dll [system]
OpenGL pipeline OpenGL API 호출 OpenGL 명령 버퍼 변환 및 조명 적용 래스터 라이즈 프레임버퍼
Draw Object Basic OpenGL Coding Style glBegin(GL_QUADS); //glBindTexture(GL_TEXTURE_2D, pTexture->mTexture[0]); glNormal3f(0.0f, 1.0f, 0.0f); //glTexCoord2f(0.0f, 1.0f); glVertex3f(-3.0f,-5.0f,-1.0f); //glTexCoord2f(0.0f, 0.0f); glVertex3f(-3.0f,-5.0f, -1.0f); //glTexCoord2f(1.0f, 0.0f); glVertex3f( 3.0f,-5.0f, 1.0f); //glTexCoord2f(1.0f, 1.0f); glVertex3f( 3.0f,-5.0f,-1.0f); glEnd();
Matrix Stack 현재의 변환 상태를 저장해 두었다가 이후에 다시 복구할 때 사용. 모델뷰 행렬과 투영행렬을 저장해두는 일종의 저장공간 glPushMatrix glPopMatrix Matrix Stack glPushMatrix(); glRotatef(45.0f, 0.0f, 0.0f, 1.0f); glTranslatef(-70.0f, 0.0f, 0.0f); DrawObject(); glPopMatrix();
Three-Dimensional Viewing ViewPlane ViewPlane Projection Reference Pointc 직교투영(Orthographic) 원근투영(Perspective)
2. 색상, 재질, 조명
실제 세계의 색상 주변광(Ambient) 분산광(Diffuse) 반사광(Specular) 세가지 빛의 결합 = 실세계의 빛
OpenGL에서 조명의 추가 조명 효과의 설정 조명 모델의 설정 재질 속성의 설정 glEnable(GL_LIGHTING); // 조명사용이 가능하도록 설정 조명 모델의 설정 Glfloat mLightAmbient[] = { 1.0f, 1.0f, 1.0f, 1.0f}; // 최고 강도를 가진 밝고 흰 조명 glLightfv(GL_LIGHT1, GL_AMBIENT, mLightAmbient); 조명모델 설정 glLightfv(GL_LIGHT1, GL_DIFFUSE, mLightDiffuse); glLightfv(GL_LIGHT1, GL_SPECULAR, mSpecular); glLightfv(GL_LIGHT1, GL_POSITION, mLightPosition); 재질 속성의 설정 glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gray);
법선벡터의 지정 법선벡터 - 버텍스에서 시작해서 정확히 윗방향으로 뻗어있는 벡터 (평면과 90도) 빛을 반사할 방향을 결정 (1, 10, 0) 전면 (1, 1, 0) 후면
3. Various Effect 4. Transformation
3. Various Effect Perspective - Line Culling One Color – Inverse effect Various Color Light Shadow
3. Various Effect Texture mapping blending Fog
3D 그래픽의 핵심 - 행렬 OpenGL의 모든 변환은 두 개 이상의 벡터곱으로 표현이 가능하다.
1. Translations We can translate or move points to a new position by adding offsets to their coordinates T(tx, ty, tz) ty tx
2. Scaling Scaling a coordinate means multiplying each of its components by a scalar 2 X 2, Y 0.5
2. Scaling Scaling Matrix scaling matrix a = b = c : 크기조정연산 균등 역변환 S^-1(s) = S(1/a, 1/b, 1/c)
3. Rotation rotation about the X-axis rotation about the Y-axis rotation about the Z-axis
3. Rotation Rotation about arbitrary point p (xr, yr) (General pivot-point Rotation) step1) translate P to origin step2) Rotation about origin step3) Re-translation to position P.
3. Rotation
4. The Rigid-Body Transform Translation + Rotation 길이와 각도가 보존된다. R00 R01 R02 tx R10 R11 R12 ty R20 R21 R22 tz 0 0 0 1 X = T(t)R =
5.Shear Transform 전체장면을 찡그려 환상적인 효과를 내거나, 흐트림(jittering)에 의해 불규칙한 반사(fuzzy reflection)효과를 만들어내는데 이용 (6개의 기본 쉬어 행렬 존재) 1 0 s 0 0 1 0 0 0 0 1 0 0 0 0 1 Hxz(s) = Hxz(s) s
6. Normal Transform 특정 행렬의 역행렬의 전치행렬 N = (M^(-1))^T
7. Inverse Transform 필요한 경우 - ex) 좌표계간의 상호변환을 하는경우 단일변환이거나 단순 변환들일경우 : 매개변수를 반전시키고 행렬의 적용순서를 바꿈 행렬이 직교한다면 전치 행렬이 역행렬이 된다. (회전은 몇 번을 결합해도 직교행렬) M^(-1) = R(-q)T(-t) M = T(t)R(q) M^(-1) = M^T
Drawing 3D scenes with OpenGL OpenGL Tools for Modeling and Viewing glTranslate (tx, ty, tz) glRotate (angle, rx, ry, rz) glScale (sx, sy, sz) Setting the Camera in OpenGL glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(angle, aspect, near, far)
Drawing 3D scenes with OpenGL Positioning and Aiming the Camera glMatrixMode(GL_MODELVIEW) glLoadIdentity() gluLookAt(eye.x, eye.y, eye.z, look.x, look.y, loo.z, up.x, up.y, up.z)