Introduction to OpenGL and GLUT
description
Transcript of Introduction to OpenGL and GLUT
![Page 1: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/1.jpg)
Introduction to OpenGL and GLUT
![Page 2: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/2.jpg)
What’s OpenGL?• An Application Programming Interface (API) • A low-level graphics programming API– Contains over 250 functions– Developed by Silicon Graphics Inc. (SGI) in 1992– Most recent version: 4.2, released on 08/08/2011
![Page 3: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/3.jpg)
OpenGL Applications
And more…
![Page 4: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/4.jpg)
Portability• Independent of display devices• Independent of window systems• Independent of operating systems
(100
• Device 1:Line(100, 50, 150, 80)
• Device 2:MoveTo(100, 50)LineTo(150, 80)
(100, 50)
(150, 80)
![Page 5: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/5.jpg)
OpenGL Basics
• The main use: Rendering.
• OpenGL can render:– Geometric primitives– Bitmaps and images
Rendering is the process of generating an image from a model (or models in what collectively could be called a scene file), by means of computer programs. -----Wikipedia
![Page 6: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/6.jpg)
An Example
void Display(){ glClear(GL_COLOR_BUFFER_BITS); glColor4f(1, 1, 0, 1); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f( 0.5, 0.5); glVertex2f( 0.5, -0.5); glEnd(); glutSwapBuffers();}
![Page 7: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/7.jpg)
Primitives
• Primitives are specified as:
• PrimType:– GL_POINTS, GL_LINES, GL_TRIANGLES, …
glBegin(primType);// your primitive vertices here.// ...// ...glEnd();
![Page 8: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/8.jpg)
Primitive Types
![Page 9: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/9.jpg)
An Example
void Display(){ glClear(GL_COLOR_BUFFER_BITS); glColor4f(1, 1, 0, 1); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f( 0.5, 0.5); glVertex2f( 0.5, -0.5); glEnd(); glutSwapBuffers();}
(-0.5, -0.5) (0.5, -0.5)
(-0.5, 0.5) (0.5, 0.5)
![Page 10: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/10.jpg)
Vertices
glVertex2f(x, y)
Number of dimensions/components2: (x, y)3: (x, y, z) or (r, g, b)4: (x, y, z, w) or (r, g, b, a)
Format b: byte
ub: unsigned byte i: int ui: unsigned int f: float d: double
v stands for vectorsglVertex2fv(x, y)
![Page 11: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/11.jpg)
An Example
void Draw_Circle(){ glColor4f(0, 0, 0, 1); int number = 20; //number of vertices float radius = 0.8f; //radius float twoPi = 2.0f * 3.14159f; glBegin(GL_POLGYON); for(int i = 0; i <number; i++) glVertex2f(radius*cosf(i*twoPi/number),
radius*sinf(i*twoPi/number)); glEnd(); }
![Page 12: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/12.jpg)
Window-Based Programming
• Most modern operating systems are windows-based.
Not window-based Window-based
![Page 13: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/13.jpg)
Window-Based Programming
• OpenGL is independent of window systems.– No functions for window operations, such as
creating, resizing, event handling, …
– This is to ensure portability across different platforms
– Now we have a problem: OpenGL doesn’t work by itself.
![Page 14: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/14.jpg)
Graphics User Interfaces
• A Graphics User Interface (GUI) provides functions to:– Create windows, sliders, menus, buttons…– Resize windows– Handle mouse click, keyboard….– …
GLX for X window systemAGL for MacWGL for Microsoft Windows
No portability…
![Page 15: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/15.jpg)
GLUT (OpenGL Utility Toolkit)
• GLUT provides basic functions to operate windows.
• GLUT is cross-platform: X window, MS window, and Mac OS.
• No sliders, no buttons, no menus, …
![Page 16: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/16.jpg)
GLUT Basics
• Program structure:1. Configure and open a window (GLUT)2. Initialize OpenGL. (Optional)3. Register callback functions. (GLUT)
a. Display (OpenGL)b. Resize (OpenGL)c. Input/output
4. Enter an event processing loop. (GLUT)
![Page 17: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/17.jpg)
An Example
#include <GL/glut.h>
void main(int argc, char **argv){ int mode=GLUT_RGB|GLUT_DOUBLE; glutInit(&argc, argv); glutInitDisplayMode(mode); glutInitWindowSize(800, 800); glutCreateWindow(“Hello Graphics World”); init(); glutDisplayFunc(display); glutKeyboardFunc(key); glutMainLoop(); }
![Page 18: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/18.jpg)
An Example
#include <GL/glut.h>
void main(int argc, char **argv){ int mode=GLUT_RGB|GLUT_DOUBLE; glutInit(&argc, argv); glutInitDisplayMode(mode); glutInitWindowSize(800, 800); glutCreateWindow(“Hello Graphics World”); init(); glutDisplayFunc(display); glutKeyboardFunc(key); glutMainLoop(); }
Display mode: RGB or color index? Single frame buffer or double?
![Page 19: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/19.jpg)
An Example
#include <GL/glut.h>
void main(int argc, char **argv){ int mode=GLUT_RGB|GLUT_DOUBLE; glutInit(&argc, argv); glutInitDisplayMode(mode); glutInitWindowSize(800, 800); glutCreateWindow(“Hello Graphics World”); init(); glutDisplayFunc(display); glutKeyboardFunc(key); glutMainLoop(); }
A window with resolution 800*800
![Page 20: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/20.jpg)
An Example
#include <GL/glut.h>
void main(int argc, char **argv){ int mode=GLUT_RGB|GLUT_DOUBLE; glutInit(&argc, argv); glutInitDisplayMode(mode); glutInitWindowSize(800, 800); glutCreateWindow(“Hello Graphics World”); init(); glutDisplayFunc(display); glutKeyboardFunc(key); glutMainLoop(); }
Create the window with a title: “hello graphics world”
![Page 21: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/21.jpg)
An Example
#include <GL/glut.h>
void main(int argc, char **argv){ int mode=GLUT_RGB|GLUT_DOUBLE; glutInit(&argc, argv); glutInitDisplayMode(mode); glutInitWindowSize(800, 800); glutCreateWindow(“Hello Graphics World”); init(); glutDisplayFunc(display); glutKeyboardFunc(key); glutMainLoop(); }
An optional init function
![Page 22: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/22.jpg)
An Example
#include <GL/glut.h>
void main(int argc, char **argv){ int mode=GLUT_RGB|GLUT_DOUBLE; glutInit(&argc, argv); glutInitDisplayMode(mode); glutInitWindowSize(800, 800); glutCreateWindow(“Hello Graphics World”); init(); glutDisplayFunc(display); glutKeyboardFunc(key); glutMainLoop(); }
Let GLUT know which function to call, when an event happens
![Page 23: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/23.jpg)
An Example
#include <GL/glut.h>
void main(int argc, char **argv){ int mode=GLUT_RGB|GLUT_DOUBLE; glutInit(&argc, argv); glutInitDisplayMode(mode); glutInitWindowSize(800, 800); glutCreateWindow(“Hello Graphics World”); init(); glutDisplayFunc(display); glutKeyboardFunc(key); glutMainLoop(); }
A loop that waits for events
![Page 24: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/24.jpg)
Event-Driven Callbacks
• Most window-based programs are event-driven:– Do nothing until an event happens,– Then call the corresponding callback function
• Events– Key press, mouse button click/release, resize, ….
![Page 25: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/25.jpg)
GLUT Display
glutDisplayFunc(mydisplay);
• mydisplay is the name of a function that you will provide.
• You can use OpenGL to draw something.• This function is called when the window needs to be
refreshed.• You can also signal a display event by youself:
glutPostRedisplay();
![Page 26: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/26.jpg)
Event QueueglutMainLoop();
Mouse event
Mouse event
Keyboard event
Display event
Call mouse function
![Page 27: Introduction to OpenGL and GLUT](https://reader036.fdocuments.net/reader036/viewer/2022081502/56815e6f550346895dccf148/html5/thumbnails/27.jpg)
Some Callback Functions
• glutKeyboardFunc
• glutMouseFunc
• glutMotionFunc
• glutSpecialFunc
• glutIdleFunc