Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SER332 Lecture 03

SER332 Lecture 03

SER332 Lecture 01 by Javier Gonzalez
Published January 9, 2018 in Programming

Introduction to Graphics and Game Development
OpenGL Overview
(201804)

Javier Gonzalez-Sanchez

January 16, 2018
Tweet

More Decks by Javier Gonzalez-Sanchez

Other Decks in Programming

Transcript

  1. jgs SER332 Introduction to Graphics and Game Development Lecture 03:

    OpenGL Overview Javier Gonzalez-Sanchez [email protected] PERALTA 230U Office Hours: By appointment
  2. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 4 jgs

    Select Desktop Development with C++
  3. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 11 jgs

    Select Windows Console Application
  4. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 13 jgs

    Add the code below to test your project
  5. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 14 jgs

    Remove Precompiled Headers § 1. Right click in the project name and select “Properties”. § 2. Select “Not Using Precompiled Headers”
  6. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 19 jgs

    § https://github.com/javiergs/SER332/tree/master/Lecture03 Download the OpenGL libraries
  7. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 21 jgs

    Copy lib and include folders to VC folder
  8. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 24 jgs

    Test OpenGL | Copy code from slides 48
  9. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 27 jgs

    … copy the dll file to the project folder
  10. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 38 jgs

    OpenGL § OpenGL basic library – most commands § OpenGL Utility (GLU) – some high level commands e.g. generating complex objects, cylinder, sphere § OpenGL Utility Toolkit (GLUT) windowing commands 38
  11. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 39 jgs

    What Is OpenGL? § Software interface to graphics hardware § Competitors: DirectX, Java2D and Java3D,… § Communicate between CPU and GPU via drivers § A client and server execution model
  12. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 41 jgs

    OpenGL as a State Machine § Maintain pipeline states: current color, viewing and projection transformation, polygon drawing modes, etc. glColor3f(1.0f, 0.0f, 0.0f); // <- alter current state // Draw a cube //What color is the cube? glColor3f(0.0, 1.0f, 0.0f); // <- alter current state // Draw a sphere. // What color is the sphere? § Hierarchical state maintenance glPushAttrib(), glPushMatrix(), glPopAttrib(), glPopMatrix(),…
  13. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 42 jgs

    OpenGL Libraries OpenGL core library (GL) #include <GL/gl.h> § OpenGL32 on Windows. GL on most UNIX / LINUX systems (libGL.a) OpenGL Utility Library (GLU) #include <GL/glu.h> § Provides functionality in OpenGL core but avoids having to rewrite code OpenGL Utility Toolkit (GLUT) #include <GL/glut.h> § Provides functionality common to all window systems: Open a window, Get input from mouse and keyboard, Menus, Event-driven § Code is portable but GLUT lacks the functionality of a good toolkit for a specific platform
  14. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 43 jgs

    OpenGL and Related APIs GLUT GLU GL GLX, AGL or WGL X, Win32, Mac O/S software and/or hardware application program OpenGL Motif widget or similar
  15. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 44 jgs

    OpenGL Syntax § GL functions glClearColor(), glEnable(), glPushMatrix() … § GLU functions gluLookAt(), gluPerspective() … § GL constants GL_COLOR_BUFFER_BIT, GL_PROJECTION, GL_MODELVIEW … § Extra letters in some commands indicate the number and type of variables glColor3f(), glVertex3f() … § OpenGL data types: GLfloat, GLdouble, GLint, GLenum, …
  16. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 46 jgs

    GLUT A simplified window system toolkit § Create windows § Initialize display context § Handle basic application events: screen refreshing, timer, resize… § Handle user inputs A higher level geometric toolkit § glutSolidSphere § glutSolidCube
  17. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 47 jgs

    GLUT Application Structure § Configure and open window § Initialize OpenGL state § Register input callback functions: render, resize, input (keyboard, mouse, etc.) § Enter event processing loop
  18. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 48 jgs

    Installation (Windows) § Add glut.h in your include path gl.h and glu.h are included by glut.h § Add glut32.lib in your library path § Add glut32.dll in "windows\system" path
  19. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 49 jgs

    GLUT Window Management § glutInit (&argc, argv); //Glut initialization § glutCreateWindow ("Example"); //Create a window § glutDisplayFunc (myDisplay) //callback function § glutMainLoop() // activate the display window § glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | …) // set initial options § glutInitWindowPosition (x, y); // integer § glutInitWindowSize (width, height ); // integer
  20. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 50 jgs

    Example 1 /** * https://github.com/javiergs/SER332/blob/master/Lecture03/main.c */ #if defined(__APPLE__) #include <GLUT/glut.h> #else #include <GL/glut.h> #endif // main void main(int argc, char** argv){ glutInit(&argc, argv); // glut init glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(500,500); // actual window size glutInitWindowPosition(0,0); // window location glutCreateWindow("simple"); myInit(); glutDisplayFunc(myDisplay); glutMainLoop(); //event loop }
  21. jgs Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 51

    Javier Gonzalez-Sanchez | SER431 | Spring 2018 | 51 // myInit void myInit() { glClearColor(0.764f, 0.129f, 0.282f, 1.0); // maroon glColor3f(1.0f, 0.843f, 0.0f); // gold // projection transformations glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); // units inside }
  22. jgs Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 52

    Javier Gonzalez-Sanchez | SER431 | Spring 2018 | 52 // myDisplay void myDisplay() { glClear(GL_COLOR_BUFFER_BIT); // clear the window glBegin(GL_POLYGON); // fill connected polygon glVertex2f(-0.7, 0.7); // vertices of the square glVertex2f( 0.6, 0.7); glVertex2f(-0.7, -0.6); glEnd(); glBegin(GL_POLYGON); // fill connected polygon glVertex2f( 0.7, 0.6); // vertices of the square glVertex2f(-0.6, -0.7); glVertex2f( 0.7, -0.7); glEnd(); glFlush(); //forces issued commands to execute }
  23. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 53 jgs

    Example 1 500 500 (0.7,0.7) (-0.7,-0.7)
  24. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 54 jgs

    Double Buffering Double buffering is necessary for almost all OpenGL applications: § Render into back buffer § Swap buffers when finished rendering a frame: The old back buffer becomes the front buffer that is displayed. The old front buffer becomes the back buffer that is rendered into. § What happens when you do not use double buffering? flickering artifacts, tearing artifacts Commands: § glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE ); § glutSwapBuffers(); //instead of glFlush()
  25. jgs SER332 Introduction to Graphics Javier Gonzalez-Sanchez [email protected] Spring 2018

    Disclaimer. These slides can only be used as study material for the class SER332 at ASU. They cannot be distributed or used for another purpose.