Introduction to OpenGL M. Ramanathan STTP CAD 2011Introduction to OpenGL.

Slides:



Advertisements
Similar presentations
02/17/05CISC640/440 OpenGL Tutorial1 OpenGL Tutorial CISC 640/440 Computer Graphics TA: Qi Li/Mani Thomas
Advertisements

MAT 594CM S2010Fundamentals of Spatial ComputingAngus Forbes Overview Goals of the course: 1. to introduce real-time 3D graphics programming with openGL.
Computer Graphics CSCE 441
OpenGL (Graphics Library) Software Interface to graphics software Allows to create interactive programs that produce color images of moving 3D objects.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 2: Complete Programs Ed Angel Professor of Computer Science,
Computer Graphics (Fall 2003) COMS 4160, Lecture 6: OpenGL 2 Ravi Ramamoorthi Many slides courtesy Greg Humphreys.
University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2008 Tamara Munzner OpenGL, GLUT, Transformations.
CENG477 Introduction to Computer Graphics Introduction to OpenGL, GLUT and GLUI.
Teaching a Graphics Class with OpenGL: Two Approaches
Interactive 3D Graphics and Virtual Reality Introduction to OpenGL concepts Session 2.
CSE 494/598 Intro to Applied Computer Graphics Anshuman Razdan DCST AR's Web Page AR's Web Page
OpenGL (II). How to Draw a 3-D object on Screen?
Introduction to OpenGL Pipeline From Programmer View Tong-Yee Lee.
Today … The rendering pipeline in detail What is OpenGL
Introduction to OpenGL Jian Huang This set of slides are extracted from the Interactive OpenGL Programming course given by Dave Shreine, Ed Angel and Vicki.
Chapter 03: Graphics Primitives Course web page: Chapter #3.
OpenGL A Brief Overview. What is OpenGL?  It is NOT a programming language.  It is a Graphics Rendering API consisting of a set of function with a well.
Computer Graphics Bing-Yu Chen National Taiwan University.
1 Computer Graphics Dr. Amy Zhang Assistant Professor of Computer Science United International College.
3D coordinate systems X Y Z Right-Hand Coordinate System X Y Z Left-Hand Coordinate System OpenGL uses this! Direct3D uses this!
Using OpenGL. 2 What is OpenGL? A software interface to graphics hardware It is a Graphics Rendering API (Application Programmer’s Interface) that is.
Open GL Programming Speaker: 彭任右 Date: 2005/10/3.
Introduction to OpenGL and GLUT GLUT. What is OpenGL? An application programming interface (API) A (low-level) Graphics rendering API Generate high-quality.
2 COEN Computer Graphics I Introductions n Brad Grantham lecturer lab dude n Dave Shreiner lecturer slave driver.
CSE 470: Computer Graphics. 10/15/ Defining a Vertex A 2D vertex: glVertex2f(GLfloat x, GLfloat y); 2D vertexfloating pointopenGL parameter type.
Introduction to OpenGL 1. 2 OpenGL A Graphics rendering API introduced in 1992 by Silicon Graphics Inc Provide the low-level functions to access graphics.
Ch 2 Graphics Programming page 1 CSC 367 Coordinate Systems (2.1.2) Device coordinates, or screen coordinates (pixels) put limitations on programmers and.
1. OpenGL/GLU/GLUT  OpenGL v4.0 (latest) is the “core” library that is platform independent  GLUT v3.7 is an auxiliary library that handles window creation,
1 Figures are extracted from Angel's book (ISBN x) The Human Visual System vs The Pinhole camera Human Visual System Visible Spectrum Pinhole.
Computer Graphics Bing-Yu Chen National Taiwan University.
Interactive Computer Graphics CS 418 MP1: Dancing I TA: Zhicheng Yan Sushma S Kini Mary Pietrowicz Slides Taken from: “An Interactive Introduction to OpenGL.
Computing & Information Sciences Kansas State University CIS 536/636 Introduction to Computer Graphics Lecture 4 of 41 William H. Hsu Department of Computing.
OpenGL: Introduction Yanci Zhang Game Programming Practice.
Computer Graphics Bing-Yu Chen National Taiwan University.
Introduction to OpenGL and GLUT. What’s OpenGL? An Application Programming Interface (API) A low-level graphics programming API – Contains over 250 functions.
Viewing and Transformation. Pixel pipeline Vertex pipeline Course Map Transformation & Lighting Primitive assembly Viewport culling & clipping Texture.
Chapters 5 2 March Classical & Computer Viewing Same elements –objects –viewer –projectors –projection plane.
CGGM Lab. Tan-Chi Ho 2001 Viewing and Transformation.
Computing & Information Sciences Kansas State University CG Basics 3 of 8: OpenGL Primer 1 CIS 636/736: (Introduction to) Computer Graphics CIS 636 Introduction.
Chap 3 Viewing and Transformation
CSCE 441: Computer Graphics
Lecture 7 Midterm Review. OpenGL Libraries gl: Basic OpenGL library, e.g. primitives. glu: OpenGL Utility library, a set of functions to create texture.
1 Programming with OpenGL Part 2: Complete Programs.
OpenGL API 2D Graphic Primitives Angel Angel: Interactive Computer Graphics5E © Addison-Wesley
CS559: Computer Graphics Lecture 12: OpenGL - Transformation Li Zhang Spring 2008.
CS559: Computer Graphics Lecture 12: OpenGL: ModelView Li Zhang Spring 2010.
Introduction to Graphics Programming. Graphics API.
Introduction to OpenGL (INF 250) Veronika Solteszova et al., UiB Dept. of Informatics,
Introduction to Graphics Programming. Graphics: Conceptual Model Real Object Human Eye Display Device Graphics System Synthetic Model Synthetic Camera.
Computer Graphics I, Fall Programming with OpenGL Part 2: Complete Programs.
OpenGL LAB III.
CS380 LAB II OpenGL Donghyuk Kim Reference1. [OpenGL course slides by Rasmus Stenholt] Reference2. [
INTRODUCTION TO OPENGL
Computer Graphics (Fall 2003) COMS 4160, Lecture 5: OpenGL 1 Ravi Ramamoorthi Many slides courtesy Greg Humphreys.
Computer Graphics Lecture 34. OpenGL Programming II Taqdees A. Siddiqi
The Human Visual System vs The Pinhole camera
Reference1. [OpenGL course slides by Rasmus Stenholt]
“Computer Science is no more about computers than astronomy is about telescopes.” Professor Edsger Dijkstra.
Programming with OpenGL Part 2: Complete Programs
OpenGL API 2D Graphic Primitives
Programming with OpenGL Part 2: Complete Programs
OpenGL (Open Graphics Library) Mr. B.A.Swamy Assistant Professor Dept of CSE.
An Interactive Introduction to OpenGL Programming
An Interactive Introduction to OpenGL Programming
Introduction to OpenGL
Programming with OpenGL Part 2: Complete Programs
Programming with OpenGL Part 2: Complete Programs
Computer Graphics 3Practical Lesson
Programming with OpenGL Part 2: Complete Programs
An Interactive Introduction to OpenGL Programming
Presentation transcript:

Introduction to OpenGL M. Ramanathan STTP CAD 2011Introduction to OpenGL

What Is OpenGL? Graphics rendering API –high-quality color images composed of geometric and image primitives –window system independent –operating system independent STTP CAD 2011Introduction to OpenGL

OpenGL Architecture Display List Polynomial Evaluator Per Vertex Operations & Primitive Assembly Rasterization Per Fragment Operations Frame Buffer Texture Memory CPU Pixel Operations STTP CAD 2011Introduction to OpenGL

OpenGL as a Renderer Geometric primitives –points, lines and polygons Image Primitives –images and bitmaps –separate pipeline for images and geometry linked through texture mapping Rendering depends on state –colors, materials, light sources, etc. STTP CAD 2011Introduction to OpenGL

Related APIs AGL, GLX, WGL –glue between OpenGL and windowing systems GLU (OpenGL Utility Library) –part of OpenGL –NURBS, tessellators, quadric shapes, etc. GLUT (OpenGL Utility Toolkit) –portable windowing API –not officially part of OpenGL STTP CAD 2011Introduction to OpenGL

OpenGL IS an API OpenGL IS nothing more than a set of functions you call from your program (think of as collection of.h file(s)). Hides the details of the display adapter, operating system, etc. Comprises several libraries with varying levels of abstraction: GL, GLU, and GLUT STTP CAD 2011Introduction to OpenGL

Preliminaries Headers Files #include Libraries Enumerated Types –OpenGL defines numerous types for compatibility –GLfloat, GLint, GLenum, etc. STTP CAD 2011Introduction to OpenGL

GLUT Basics Application Structure –Configure and open window –Initialize OpenGL state –Register input callback functions render resize input: keyboard, mouse, etc. –Enter event processing loop STTP CAD 2011Introduction to OpenGL

Sample Program void main( int argc, char** argv ) { int mode = GLUT_RGB|GLUT_DOUBLE; glutInitDisplayMode( mode ); glutCreateWindow( argv[0] ); init(); glutDisplayFunc( display ); glutReshapeFunc( resize ); glutKeyboardFunc( key ); glutIdleFunc( idle ); glutMainLoop(); } STTP CAD 2011Introduction to OpenGL

OpenGL Initialization Set up whatever state you’re going to use void init( void ) { glClearColor( 0.0, 0.0, 0.0, 1.0 ); glClearDepth( 1.0 ); glEnable( GL_LIGHT0 ); glEnable( GL_LIGHTING ); glEnable( GL_DEPTH_TEST ); } STTP CAD 2011Introduction to OpenGL

GLUT Callback Functions Routine to call when something happens –window resize or redraw –user input –animation “Register” callbacks with GLUT glutDisplayFunc( display ); glutIdleFunc( idle ); glutKeyboardFunc( keyboard ); STTP CAD 2011Introduction to OpenGL

Rendering Callback Do all of your drawing here glutDisplayFunc( display ); void display( void ) { glClear( GL_COLOR_BUFFER_BIT ); glBegin( GL_TRIANGLE_STRIP ); glVertex3fv( v[0] ); glVertex3fv( v[1] ); glVertex3fv( v[2] ); glVertex3fv( v[3] ); glEnd(); glutSwapBuffers(); } Do all of your drawing here glutDisplayFunc( display ); void display( void ) { glClear( GL_COLOR_BUFFER_BIT ); glBegin( GL_TRIANGLE_STRIP ); glVertex3fv( v[0] ); glVertex3fv( v[1] ); glVertex3fv( v[2] ); glVertex3fv( v[3] ); glEnd(); glutSwapBuffers(); } STTP CAD 2011Introduction to OpenGL

Elementary Rendering Geometric Primitives Managing OpenGL State OpenGL Buffers Geometric Primitives Managing OpenGL State OpenGL Buffers STTP CAD 2011Introduction to OpenGL

OpenGL Geometric Primitives All geometric primitives are specified by vertices GL_QUAD_STRIP GL_POLYGON GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_POINTS GL_LINES GL_LINE_LOOP GL_LINE_STRIP GL_TRIANGLES GL_QUADS STTP CAD 2011Introduction to OpenGL

Simple Example void drawRhombus( GLfloat color[] ) { glBegin( GL_QUADS ); glColor3fv( color ); glVertex2f( 0.0, 0.0 ); glVertex2f( 1.0, 0.0 ); glVertex2f( 1.5, ); glVertex2f( 0.5, ); glEnd(); } void drawRhombus( GLfloat color[] ) { glBegin( GL_QUADS ); glColor3fv( color ); glVertex2f( 0.0, 0.0 ); glVertex2f( 1.0, 0.0 ); glVertex2f( 1.5, ); glVertex2f( 0.5, ); glEnd(); } STTP CAD 2011Introduction to OpenGL

OpenGL Command Formats glVertex3fv( v ) Number of components 2 - (x,y) 3 - (x,y,z) 4 - (x,y,z,w) Data Type b - byte ub - unsigned byte s - short us - unsigned short i - int ui - unsigned int f - float d - double Vector omit “v” for scalar form glVertex2f( x, y ) STTP CAD 2011Introduction to OpenGL

Specifying Geometric Primitives Primitives are specified using glBegin( primType ); glEnd(); –primType determines how vertices are combined GLfloat red, green, blue; Glfloat coords[3]; glBegin( primType ); for ( i = 0; i < nVerts; ++i ) { glColor3f( red, green, blue ); glColor3f( red, green, blue ); glVertex3fv( coords ); glVertex3fv( coords );}glEnd(); STTP CAD 2011Introduction to OpenGL

Manipulating OpenGL State Appearance is controlled by current state for each ( primitive to render ) { update OpenGL state render primitive } Manipulating vertex attributes is most common way to manipulate state glColor*() / glIndex*() glNormal*()glTexCoord*() Appearance is controlled by current state for each ( primitive to render ) { update OpenGL state render primitive } Manipulating vertex attributes is most common way to manipulate state glColor*() / glIndex*() glNormal*()glTexCoord*() STTP CAD 2011Introduction to OpenGL

Controlling current state Setting State glPointSize( size ); glLineStipple( repeat, pattern ); glShadeModel( GL_SMOOTH ); Enabling Features glEnable( GL_LIGHTING ); glDisable( GL_TEXTURE_2D ); Setting State glPointSize( size ); glLineStipple( repeat, pattern ); glShadeModel( GL_SMOOTH ); Enabling Features glEnable( GL_LIGHTING ); glDisable( GL_TEXTURE_2D ); STTP CAD 2011Introduction to OpenGL

Transformations in OpenGL Modeling Viewing –orient camera –projection Animation Map to screen STTP CAD 2011Introduction to OpenGL

Camera Analogy 3D is just like taking a photograph (lots of photographs!) camera tripod model viewing volume STTP CAD 2011Introduction to OpenGL

Camera Analogy and Transformations Projection transformations –adjust the lens of the camera Viewing transformations –tripod–define position and orientation of the viewing volume in the world Modeling transformations –moving the model Viewport transformations –enlarge or reduce the physical photograph STTP CAD 2011Introduction to OpenGL

Coordinate Systems and Transformations Steps in Forming an Image –specify geometry (world coordinates) –specify camera (camera coordinates) –project (window coordinates) –map to viewport (screen coordinates) Each step uses transformations Every transformation is equivalent to a change in coordinate systems (frames) STTP CAD 2011Introduction to OpenGL

Affine Transformations Want transformations which preserve geometry –lines, polygons, quadrics Affine = line preserving –Rotation, translation, scaling –Projection –Concatenation (composition) STTP CAD 2011Introduction to OpenGL

Homogeneous Coordinates –each vertex is a column vector –w is usually 1.0 –all operations are matrix multiplications –directions (directed line segments) can be represented with w = 0.0 STTP CAD 2011Introduction to OpenGL

3D Transformations A vertex is transformed by 4 x 4 matrices –all affine operations are matrix multiplications –all matrices are stored column-major in OpenGL –matrices are always post-multiplied –product of matrix and vector is STTP CAD 2011Introduction to OpenGL

Specifying Transformations Programmer has two styles of specifying transformations glLoadMatrix, glMultMatrix –specify matrices ( glLoadMatrix, glMultMatrix ) glRotate, glOrtho –specify operation ( glRotate, glOrtho ) Programmer does not have to remember the exact matrices –check appendix of Red Book (Programming Guide) STTP CAD 2011Introduction to OpenGL

Programming Transformations Prior to rendering, view, locate, and orient: –eye/camera position –3D geometry Manage the matrices –including matrix stack Combine (composite) transformations STTP CAD 2011Introduction to OpenGL

Transformation Pipeline other calculations here –material  color –shade model (flat) –polygon rendering mode –polygon culling –clipping vertexvertex Modelview Matrix Projection Matrix Perspective Division Viewport Transform Modelview Projection object eye clip normalized device window STTP CAD 2011Introduction to OpenGL

Matrix Operations Specify Current Matrix Stack glMatrixMode( GL_MODELVIEW or GL_PROJECTION ) Other Matrix or Stack Operations glLoadIdentity() glPushMatrix() glPopMatrix() Viewport –usually same as window size –viewport aspect ratio should be same as projection transformation or resulting image may be distorted glViewport( x, y, width, height ) Specify Current Matrix Stack glMatrixMode( GL_MODELVIEW or GL_PROJECTION ) Other Matrix or Stack Operations glLoadIdentity() glPushMatrix() glPopMatrix() Viewport –usually same as window size –viewport aspect ratio should be same as projection transformation or resulting image may be distorted glViewport( x, y, width, height ) STTP CAD 2011Introduction to OpenGL

Projection Transformation Shape of viewing frustum Perspective projection gluPerspective( fovy, aspect, zNear, zFar ) glFrustum ( left, right, bottom, top, zNear, zFar ) Orthographic parallel projection glOrtho( left, right, bottom, top, zNear, zFar ) gluOrtho2D( left, right, bottom, top ) calls glOrtho with z values near zero Shape of viewing frustum Perspective projection gluPerspective( fovy, aspect, zNear, zFar ) glFrustum ( left, right, bottom, top, zNear, zFar ) Orthographic parallel projection glOrtho( left, right, bottom, top, zNear, zFar ) gluOrtho2D( left, right, bottom, top ) calls glOrtho with z values near zero STTP CAD 2011Introduction to OpenGL

Applying Projection Transformations Typical use (orthographic projection) glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glOrtho( left, right, bottom, top, zNear, zFar ); Typical use (orthographic projection) glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glOrtho( left, right, bottom, top, zNear, zFar ); STTP CAD 2011Introduction to OpenGL

Viewing Transformations Position the camera/eye in the scene –place the tripod down; aim camera To “fly through” a scene –change viewing transformation and redraw scene gluLookAt( eye x, eye y, eye z, aim x, aim y, aim z, up x, up y, up z ) –up vector determines unique orientation –careful of degenerate positions tripod STTP CAD 2011Introduction to OpenGL

Modeling Transformations Move object glTranslate{fd}( x, y, z ) Rotate object around arbitrary axis glRotate{fd}( angle, x, y, z ) –angle is in degrees Dilate (stretch or shrink) or mirror object glScale{fd}( x, y, z ) STTP CAD 2011Introduction to OpenGL

Connection: Viewing and Modeling Moving camera is equivalent to moving every object in the world towards a stationary camera Viewing transformations are equivalent to several modeling transformations gluLookAt() has its own command can make your own polar view or pilot view STTP CAD 2011Introduction to OpenGL

Projection is left handed gluPerspective, glOrthoProjection transformations ( gluPerspective, glOrtho ) are left handed –think of zNear and zFar as distance from view point Everything else is right handed, including the vertexes to be rendered x x y y z+ left handedright handed STTP CAD 2011Introduction to OpenGL

Common Transformation Usage 3 examples of resize() routine –restate projection & viewing transformations Usually called when window resized Registered as callback for glutReshapeFunc () 3 examples of resize() routine –restate projection & viewing transformations Usually called when window resized Registered as callback for glutReshapeFunc () STTP CAD 2011Introduction to OpenGL

resize() : Perspective & LookAt void resize( int w, int h ) { glViewport( 0, 0, (GLsizei) w, (GLsizei) h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 65.0, (GLdouble) w / h, 1.0, ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); gluLookAt( 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); } void resize( int w, int h ) { glViewport( 0, 0, (GLsizei) w, (GLsizei) h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 65.0, (GLdouble) w / h, 1.0, ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); gluLookAt( 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); } STTP CAD 2011Introduction to OpenGL

resize() : Perspective & Translate Same effect as previous LookAt void resize( int w, int h ) { glViewport( 0, 0, (GLsizei) w, (GLsizei) h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 65.0, (GLdouble) w/h, 1.0, ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glTranslatef( 0.0, 0.0, -5.0 ); } Same effect as previous LookAt void resize( int w, int h ) { glViewport( 0, 0, (GLsizei) w, (GLsizei) h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 65.0, (GLdouble) w/h, 1.0, ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glTranslatef( 0.0, 0.0, -5.0 ); } STTP CAD 2011Introduction to OpenGL

resize() : Ortho (part 1) void resize( int width, int height ) { GLdouble aspect = (GLdouble) width / height; GLdouble left = -2.5, right = 2.5; GLdouble bottom = -2.5, top = 2.5; glViewport( 0, 0, (GLsizei) w, (GLsizei) h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); … continued … void resize( int width, int height ) { GLdouble aspect = (GLdouble) width / height; GLdouble left = -2.5, right = 2.5; GLdouble bottom = -2.5, top = 2.5; glViewport( 0, 0, (GLsizei) w, (GLsizei) h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); … continued … STTP CAD 2011Introduction to OpenGL

resize() : Ortho (part 2) if ( aspect < 1.0 ) { left /= aspect; right /= aspect; } else { bottom *= aspect; top *= aspect; } glOrtho( left, right, bottom, top, near, far ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); } STTP CAD 2011Introduction to OpenGL

References 001/OpenGL.pptwww.opengl.org/resources/code/samples/s2 001/OpenGL.ppt D. Shreiner, M. Woo, J. Neider, and T. Davis. OpenGL (R) Programming Guide : The Official Guide to Learning OpenGL (R), Version 2 (5th Edition). Addison-Wesley Professional, August STTP CAD 2011Introduction to OpenGL