1 / 66

Chapter 2 Graphics Programming

Chapter 2 Graphics Programming. Using OpenGL in Visual C++ – 1/3. Opengl32.dll and glu32.dll should be in the system folder Opengl32.lib and glu32.lib should be in the lib folder for VC++ gl.h and glu.h should be in a folder called GL under the include folder for VC++

shima
Download Presentation

Chapter 2 Graphics Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 2Graphics Programming

  2. Using OpenGL in Visual C++ – 1/3 Opengl32.dll and glu32.dll should be in the system folder Opengl32.lib and glu32.lib should be in the lib folder for VC++ gl.h and glu.h should be in a folder called GL under the include folder for VC++ Get glut32.lib, glut32.dll and glut.h from the course homepage and put them in the same places as the other files

  3. Using OpenGL in Visual C++ – 2/3 Fire up visual studio Create a new project as the following:File  New  Project (input your project name, then a directory (workspace) with the same name will be built)  Win32 Console Application  An Empty Application

  4. Using OpenGL in Visual C++ – 3/3 In the workspace click on “File View” to access (expand) the source code tree In “Source Files”, add in the source code (*.c files) Select Project  Settings  Link andin “Object/library modules” add “Opengl32.lib glu32.lib glut32.lib” Press “F7” to build “your_project.exe”

  5. Sierpinski Gasket – 1/2 Pick an initial point at random inside the triangle Select one of the three vertices at random Find the point halfway between the initial point and the randomly selected vertex Display the new point Replace the initial point with this new point Return to step 2

  6. Sierpinski Gasket – 2/2 main() { initialize_the_system(); for(some_number_of_points) { pt = generate_a_point(); display_the_point(pt); } cleanup(); }

  7. Programming 2D Applications • A vertex is a location in space • glVertex* • * is in the form of nt or ntv • n is the number of dimensions • t denotes the data type:integer (i), float (f), or double (d); pointer to an array (v) • #define GLfloat float

  8. Examples glVertex2i(GLint xi, GLint yi) glVertex3f(GLfloat x, GLfloat y, GLfloat z) GLfloat vertex[3]glVertex3fv(vertex)

  9. OpenGL Object Examples glBegin(GL_LINES); glVertex2f(x1, y1); glVertex2f(x2, y2);glEnd(); glBegin(GL_POINTS); glVertex2f(x1, y1); glVertex2f(x2, y2);glEnd();

  10. Code of Sierpinski Gasket – 1/3 Typedef GLfloat point2[2]; void display(void) { point2 vertices[3]={{0,0},{250,500},{500,0}}; /* an arbitrary triangle */ static point2 p = {75,50}; /* any desired initial point */ int j, k; int rand(); /* standard random-number generator */

  11. Code of Sierpinski Gasket – 2/3 for(k=0;k<5000;k++) { j=rand()%3; /* pick a random vertex from 0, 1, 2 */ p[0]=(p[0]+vertices[j][0])/2; /* compute new point */ p[1]=(p[1]+vertices[j][1])/2; glBegin(GL_POINTS); glVertex2fv(p); /* display new point */ glEnd(); } glFlush(); }

  12. Code of Sierpinski Gasket – 3/3

  13. Questions In what colors are we drawing Where on the screen does our image appear How large will the image be How do we create an area of the screen – a window – for our image? How long will the image remain on the screen?

  14. Coordinate Systems

  15. OpenGL API

  16. Graphics Functions – 1/3

  17. Graphics Functions – 2/3 Primitive functions: points, line segments, polygons, pixels, text, curves, surfaces Attributes functions:color, pattern, typeface Viewing functions:position, orientation, clipping

  18. Graphics Functions – 3/3 Transformation functions:rotation, translation, scaling Input functions:keyboards, mice, data tablets Control functions:communicate with windows, initialization, error handling Inquiry functions: number of colors, camera parameters/values

  19. Graphics Pipeline and State Machine • Functionalities of graphics functions: • Define primitive: glvertex* • Change opengl state (most of them!) • Present color, current matrix

  20. OpenGL Interface GL (OpenGL in Windows) GLU (graphics utility library)uses only GL functions, creates common objects (such as spheres) GLUT (GL Utility Toolkit)interfaces with the window system GLX: glue between OpenGL and Xwindow, used by GLUT

  21. OpenGL Library Organization

  22. API Dilemma for Primitives • Minimal or maximal? • Convenience versus portability • OpenGL’s intermediate approach: • GL contains a small set of basic primitives • GLU contains richer set of objects

  23. OpenGL Primitives Geometric primitives and raster primitives

  24. Points and Line Segments

  25. Polygon Basics – 1/3 Filled objects Methods of displaying a polygon

  26. Polygon Basics – 2/3 Simple Nonsimple Simple, convex, and flat

  27. Polygon Basics – 3/3 Convexity Convex objects

  28. Polygon Types in OpenGL – 1/2 In OpenGL, edges and interior must be drawn separately!

  29. Polygon Types in OpenGL – 2/2 Use triangles if possible because of efficiency!

  30. Drawing a Sphere – 1/5

  31. Drawing a Sphere – 2/5 z x  y 

  32. Drawing a Sphere – 3/5 Drawing the portion of lower latitudes c=M_PI/180.0; // degrees to radians, M_PI=3.14159… for(phi=-80.0; phi<=80.0; phi+=20.0) { glBegin(GL_QUAD_STRIP); for(theta=-180.0; theta<=180.0; theta+=20.0) { x=sin(c*theta)*cos(c*phi); y=cos(c*theta)*cos(c*phi); z=sin(c*phi); glVertex3d(x, y, z); x=sin(c*theta)*cos(c*(phi+20.0)); y=cos(c*theta)*sin(c*(phi+20.0)); z=sin(c*(phi+20.0)); glVertex3d(x, y, z); } glEnd(); }

  33. Drawing a Sphere – 4/5 Drawing the portion around the north pole x=y=0; z=1; glBegin(GL_TRIANGLE_FAN); glVertex3d(x, y, z); c=M_PI/180.0; z=sin(c*80.0); for(theta=-180.0; theta<=180.0; theta+=20.0) { x=sin(c*theta)*cos(c*80.0); y=cos(c*theta)*sin(c*80.0); glVertex3d(x, y, z); } glEnd();

  34. Drawing a Sphere – 5/5 Drawing the portion around the south pole x=y=0; z=-1; glBegin(GL_TRIANGLE_FAN); glVertex3d(x, y, z); z=-sin(c*80.0); for(theta=-180.0; theta<=180.0; theta+=20.0) { x=sin(c*theta)*cos(c*80.0); y=cos(c*theta)*sin(c*80.0); glVertex3d(x, y, z); } glEnd();

  35. Text – Stroke or Raster

  36. Attributes for Lines, Texts …

  37. Color – 1/4 C=T1R+T2G+T3B, T1, T2,T3 are the tristimulus values Additive color matching

  38. Color – 2/4 Basic tenet of three-color theory:If two colors produce the same tristimulus values, then they are visually indistinguishable The range of colors that we can produce on a given system is called that system’s color gamut

  39. Color – 3/4 Color Solid

  40. Color – 4/4 Subtractive Color Additive Color

  41. RGB Color • glColor3f(1.0, 0.0, 0.0):Can be used to specify 24 bits true colors • Alpha channel:Used in OpenGL as an opacity or transparency value • glClearColor(1.0, 1.0,1.0,1.0) • glPointSize(2.0)

  42. Indexed Color Color-lookup table Example: k=m=8: pick 256 out of 16M colors

  43. Two-dimensional Viewing Objects before clipping Image after clipping

  44. Viewing Volume OpenGL default: 222 cube

  45. Orthographic View void glOrtho(GLdouble left, GLdouble right, …)

  46. Matrix Mode • There are two matrices in OpenGL: • Model-view: defines COP and orientation • Projection: defines the projection matrix • glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, 500.0, 0.0, 500.0);glMatrixMode(GL_MODELVIEW);

  47. Control Functions OpenGL assumes origin is bottom left glutInit(int *argcp, char **argv); glutCreateWindow(char *title); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(480,640); glutInitWindowPosition(0,0); OpenGL default: RGB color, no hidden-surface removal, single buffering

  48. Aspect Ratio Viewing rectangle glOrtho(…) Display window glutInitWindowSize(…)

  49. Viewports void glViewport(GLint x, GLint y, GLsizei w, GLsizei h) Viewport is part of the state.

  50. main, display, myinit functions … void glutMainLoop(void)Why do we need this? void glutDisplayFunc(void (*func)(void))When is the function invoked?

More Related