160 likes | 290 Views
Assignment 2 Phase 1. Transformation Back-face culling View frustum culling. Outline. Implement the transformation. Modelview transformation Projection transformation Perspective division Viewport transformation Implement back-face culling. Bonus: Implement view frustum culling.
E N D
Assignment 2 Phase 1 Transformation Back-face culling View frustum culling
Outline • Implement the transformation. • Modelview transformation • Projection transformation • Perspective division • Viewport transformation • Implement back-face culling. • Bonus: Implement view frustum culling.
Input and Output • Input: *.view *.obj *.mtl • Same as assignment 1 • Output: Wireframe of the obj with back-face culling
Transformation 1/3 Modelview Matrix Projection Matrix Viewport Transformation Perspective Division Vertex Vertex = Projection * Modelview * Vertex ; Vertex.xyzw /= Vertex.w; Vertex = Viewport * Vertex;
Model view gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble atx, GLdouble aty, GLdouble atz, GLdouble upx, GLdouble upy, GLdoubpe upz ); N = (eye - at)/|eye - at|; V = up – (N•up)N; |up| = 1.0 U = V x N ;
Model view • Modelview = BT
Projection • gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far );
Projection • n=near; • f=far; • t=n*tan( fovy *PI / 180.0 /2); • b= -t; • r= t* aspect; • l= -r;
Projection • Projection = NSH =
Perspective Division • x /= w; • y /= w; • z /= w; • w /= w;
View Port • Viewport = TS • From [-1 , 1 ] to [0 , width (or height) ]
Back-face culling • You can perform back-face culling in • World cord. • View cord. • ZN < 0 • Window cord. • Clock wise 1 Back face 3 2
View frustum culling • eliminate the polygon that complete outside the view frustum. • Bonus: view frustum clipping • Remove the part of polygon that outside the view frustum.
How to draw wireframe? • Render the image using glBegin(GL_LINE_LOOP); glVertex2i(x,y); … glEnd();
What to do in reshape function? void GL_reshape(GLsizei w, GLsizei h){ glViewport(viewport->x, viewport->y, viewport->width, viewport->height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(viewport->x, viewport->width, viewport->y, viewport->height); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }
UI requirement • Show an input command line. • “Please input the file name.” • If I type “box”, then read box.obj and box.view etc.