Slide 1

Slide 1 text

jgs SER332 Introduction to Graphics and Game Development Lecture 03: OpenGL Overview Javier Gonzalez-Sanchez [email protected] PERALTA 230U Office Hours: By appointment

Slide 2

Slide 2 text

jgs Microsoft Visual Studio 2017 Windows 10 Install and Configure

Slide 3

Slide 3 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 3 jgs Run the installation file

Slide 4

Slide 4 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 4 jgs Select Desktop Development with C++

Slide 5

Slide 5 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 5 jgs Install

Slide 6

Slide 6 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 6 jgs Restart

Slide 7

Slide 7 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 7 jgs Sign up (optional)

Slide 8

Slide 8 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 8 jgs Settings: Visual C++ (optional)

Slide 9

Slide 9 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 9 jgs Start Page

Slide 10

Slide 10 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 10 jgs Create a new project

Slide 11

Slide 11 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 11 jgs Select Windows Console Application

Slide 12

Slide 12 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 12 jgs Name your Project

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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”

Slide 15

Slide 15 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 15 jgs Build (compile)

Slide 16

Slide 16 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 16 jgs Build succeeded

Slide 17

Slide 17 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 17 jgs Run it

Slide 18

Slide 18 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 18 jgs A console will open

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 20 jgs Copy DLL file to Windows/System32

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 22 jgs Update VC++ Directories | Include

Slide 23

Slide 23 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 23 jgs Update VC++ Directories | lib

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 25 jgs Test OpenGL

Slide 26

Slide 26 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 26 jgs If you get a glut32.dll error,

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

jgs Introduction to OpenGL

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 40 jgs OpenGL Rendering Pipeline

Slide 32

Slide 32 text

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(),…

Slide 33

Slide 33 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 42 jgs OpenGL Libraries OpenGL core library (GL) #include § OpenGL32 on Windows. GL on most UNIX / LINUX systems (libGL.a) OpenGL Utility Library (GLU) #include § Provides functionality in OpenGL core but avoids having to rewrite code OpenGL Utility Toolkit (GLUT) #include § 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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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, …

Slide 36

Slide 36 text

jgs GLUT OpenGL Utility Toolkit

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 50 jgs Example 1 /** * https://github.com/javiergs/SER332/blob/master/Lecture03/main.c */ #if defined(__APPLE__) #include #else #include #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 }

Slide 42

Slide 42 text

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 }

Slide 43

Slide 43 text

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 }

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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()

Slide 46

Slide 46 text

Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 55 jgs Homework Start Programming!

Slide 47

Slide 47 text

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.