Presentation is loading. Please wait.

Presentation is loading. Please wait.

OpenGL Programming (II) 3D Graphics Fundamentals

Similar presentations


Presentation on theme: "OpenGL Programming (II) 3D Graphics Fundamentals"— Presentation transcript:

1 OpenGL Programming (II) 3D Graphics Fundamentals
컴퓨터 그래픽스 담당교수 : 김 창 헌

2 3D Perception 3D vs 3D Perception 3D 에서 실제 본다(see)는 것
깊이나 3D에 대한 환영(illusion)을 제공 3D 에서 실제 본다(see)는 것 두 눈으로 물체를 본다. 각 눈의 망막에 서로 다른 2D 이미지를 만듬. 뇌가 서로 다른 2장의 2D 이미지를 한 장의 3D 이미지로 합성. 물체가 멀리 있을수록 두 눈이 응시하는 각 작아짐.

3 한 장의 사진에서 3D 효과 한 장의 사진이면? Cartoon, animation등 Perspective
Hidden Surface Removal Color and Shading Lights and Shadow

4 2D + Perspective = 3D 하나의 눈 (카메라)에서 생성된 이미지도 3D 효과를 가질 수 있다.
가까운 물체는 먼 물체보다 더 큰 것 같다. 이 특징 하나로 3D 효과 가능

5 Hidden Line Removal Depth Cueing Hiddein Surface removal
눈에서 거리가 멀수록 edge는 희미하게 보인다. Hiddein Surface removal surface로 된 육면체는 뒤쪽 표면이 보이지 않는다.

6 Colors and Shading Wireframe Texture Color 여전히 이미지는 real하지 않다.
나무 질감, 과자 상자 위의 무늬 Color 각 면의 색깔을 다르게

7 Lights and Shadows Light 물체의 intensity의 분포를 결정짓는다. Shadow 빛에 의한 그림자 효과

8 Coordinate Systems 3D 물체가 어떻게 스크린에 그려지나? 좌표계 필요 OpenGL
Window가 생성되면 Coordinate system 필요 지정된 좌표계가 screen pixel상에 매핑되는 함수 지원

9 2D Cartesian Coordinate
Clipping Area Viewport Drawing Primitive

10 Coordinate Clipping Window를 점유하는 Cartesian Space의 영역 명시 ( Clipping Area) 지정된 좌표를 스크린 좌표로 이동 Window Client Area

11 Viewport Clipping area를 그리기 위해 사용하는 window의 client area 안의 영역
Clipping area를 window 영역에 mapping ( 대개 영역 전체에 할당 ) Clipping Area Window Client Area 일부 영역 가능(Viewport

12 계속 Logical coordinate가 더 큰 screen coordinate에 매핑

13 Projections, The Essence of 3D
3D Cartesian Coordinate Orthographic Projections Perspective Projections top Clipping Volume near Viewport

14 Window Screen Coordinate
y x (100, 100) (100, 100) y x Windows Screen Coordinate OpenGL Screen Coordinate

15 Drawing Shapes with OpenGL
Simple Program using AUX Lib void main(void) { // AUX library window and mode setup auxInitDisplayMode(AUX_SINGLE | AUX_RGBA); auxInitPosition(100,100,250,250); auxInitWindow("My second OpenGL Program"); // Set function to call when window needs updating auxMainLoop(RenderScene); }

16 Rendering Function Callback 함수 예제 window가 update될 필요가 있을 때마다 부른다.
void CALLBACK RenderScene(void) { }

17 Drawing a Rectangle 2D flat rectangle Sample 3D 상의 z=0인 평면 위에 존재
glClearColor(0.0f, 0.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0f, 0.0f, 0.0f); glRectf(100.0f, 150.0f, 150.0f, 100.0f); glFlush();

18 Scaling to the Window Setting the Viewport and Clipping Volume
window creation code auxInitPosition(100,100,250,250); viewport 와 window size viewport는 1사분면에 존재 (0, 0, 255, 255)

19 Reshape Function ( Aux lib )
Viewport setting Code glViewport(0, 0, w, h); Reshape Function ( Aux lib ) main( ) { . auxReshapeFunc(ChangeSize); auxMainLoop(RenderScene); }

20 Defining Viewport and Clipping Volume
void CALLBACK ChangeSize(GLsizei w, GLsizei h) { // Set Viewport to window dimensions glViewport(0, 0, w, h); // Reset coordinate system glLoadIdentity(); // Establish clipping volume (left, right, bottom, top, near, far) if (w <= h) glOrtho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0); else glOrtho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0); }

21 Keeping a Square Square
Apect ratio height/width Image distortion ex) glOrtho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0); glOrtho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0); Clipping Region 250 250 250 250 250 250


Download ppt "OpenGL Programming (II) 3D Graphics Fundamentals"

Similar presentations


Ads by Google