0% found this document useful (0 votes)
7 views25 pages

1 Intro To Opengl

The document provides an overview of OpenGL and GLUT, detailing the graphics pipeline, 2-D drawing, and user interaction. It explains the structure of an event-driven GLUT program, including window configuration, OpenGL state initialization, and callback functions. Additionally, it covers the setup process for GLUT on various Windows platforms and includes example code for a simple OpenGL program.

Uploaded by

ppronoy5
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views25 pages

1 Intro To Opengl

The document provides an overview of OpenGL and GLUT, detailing the graphics pipeline, 2-D drawing, and user interaction. It explains the structure of an event-driven GLUT program, including window configuration, OpenGL state initialization, and callback functions. Additionally, it covers the setup process for GLUT on various Windows platforms and includes example code for a simple OpenGL program.

Uploaded by

ppronoy5
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 25

OpenGL and GLUT Basics

Outline

• OpenGL & GLUT basics

– Grpahics Pipeline
– 2-D drawing
– User interaction

2
Graphics Pipeline

3
OpenGL – What is It?
• GL (Graphics Library): Library of 2-D, 3-D
drawing primitives and operations
– API for 3-D hardware acceleration
• GLU (GL Utilities): Miscellaneous
functions dealing with camera set-up and
higher-level shape descriptions
• GLUT (GL Utility Toolkit): Window-system
independent toolkit with numerous utility
functions, mostly dealing with user
interface

4
Event-driven GLUT program structure

1. Configure and open window


2. Initialize OpenGL state, program variables
3. Register callback functions
• Display (where rendering occurs)
• Resize
• User input: keyboard, mouse clicks,
motion, etc.
4. Enter event processing loop

5
Call Back Function

• A callback function is a function passed


into another function as an argument,
which is then invoked inside the
outer function to complete some kind of
routine or action.
• In C, a callback function is a function that
is called through a function pointer

6
Simple OpenGL program
#include <stdio.h>
#include <GL/glut.h>
void main(int argc, char** argv)
{
glutInit(&argc, argv); // configure and open window
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(100, 100);
glutCreateWindow(“hello”);
init(); // set OpenGL states, variables
glutDisplayFunc(display); // register callback
routines
glutKeyboardFunc(keyboard);
glutMainLoop(); // enter event-driven loop
}

7
Configure and open window
• glutInit: Pass command-line flags on to GLUT
• glutInitDisplayMode: OR together bit masks to
set modes on pixel type
• glutInitWindowSize, glutCreateWindow: Set
drawing window attributes, then make it

8
Initialize OpenGL state
• init(): Set OpenGL state, program variables
– Use GL types/typedefs GLfloat, GLint, GL_TRUE,
GL_FALSE, etc. for
cross-platform compatibility
void init() {
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, right, 0, top);
}
sets “units” of subsequent draw commands

9
OpenGL screen coordinates
• Bottom left corner is origin
• gluOrtho2D() sets the units of the screen
coordinate system
•gluOrtho2D(0, w, 0, h) means the
coordinates are in units of pixels
•gluOrtho2D(0, 1, 0, 1) means the
coordinates are in units of “fractions of window
size” (regardless of actual window size)
• glOrtho2D(L,R,B,T);

10
• glutInitWindowSize sets the size of the
window.

• Use glViewport to specify the window


region in window coordinates to be drawn
to.

• gluOrtho2D specifies the coordinates to be


used with the viewport which defaults to
the window size. 11
• So, if you want create a 400 x 400 window
and only want to draw to the rectangle(50,
50, 350, 350) within the window, then use
glViewport(50, 50, 350, 350). You would
then use gluOrtho2D to set your GL
coordinates wthin the viewport. So, if you
used gluOrtho2D(-1.0, 1.0, -1.0, 1.0) then
visible GL coordinates would range from -
1.0 to 1.0 in the x direction, from -1.0 to
1.0 in the y direction.
12
Example: Specifying the center of a
square

13
Example: Specifying the center of a
square

14
A complete OpenGL program
#include <stdio.h>
#include <GL/glut.h>
void main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (640, 480);
glutInitWindowPosition (100, 150);
glutCreateWindow ("my first attempt");
glutDisplayFunc(myDisplay);
myInit ();
glutMainLoop();
}

15
A complete OpenGL program (cont.)
void myDisplay(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0, 0.0, 0.0);
glPointSize(4.0);
glBegin(GL_POINTS);
glVertex2i(100, 50);
glVertex2i(100, 130);
glVertex2i(150, 130);
glEnd();
glFlush ();
}

16
A complete OpenGL program (cont.)
void myInit (void)
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glColor3f(0.0f, 0.0f, 0.0f);
glPointSize(4.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 640.0, 0.0, 480.0);
}

17
Rendering Steps
In function registered with glutDisplayFunc():
1. Clear window
• glClear(GL_COLOR_BUFFER_BIT);
2. Draw shapes
• Set colors, patterns, point/line sizes
• Specify type of geometric primitive(s) and list
vertices
3. Swap buffers if display mode is GLUT_DOUBLE
4. Force all operations to complete with glFlush()

18
Single- vs. double-buffering

• Single-buffering: Draw directly to screen


buffer
• Double-buffering: Draw to offscreen
buffer, then make that the screen buffer
when done
• For animation, double-buffering is better
because it eliminates flickering

19
OpenGL Geometric Primitives

20
Windows Config: glut

• Unzip glut-3.7.6-bin.zip and you will get

• 1. glut.h
• 2. glut32.dll
• 3. glut32.lib

21
Windows Config: glut
• Visual Studio 2010
• Windows (7/8)
• ====================

• On 32bit versions of windows:


– copy glut.h in include/GL folder to C:\Program Files\Microsoft
SDKs\Windows\v7.0A\Include\gl
– copy glut32.lib in lib folder to C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib
– copy glut32.dll to C:\windows\system32
• On 64bit versions of windows:
– copy glut.h in include/GL folder to C:\Program Files(x86)\Microsoft
SDKs\Windows\v7.0A\Include\gl
– copy glut32.lib in lib folder to C:\Program Files(x86)\Microsoft SDKs\Windows\v7.0A\Lib
– copy glut32.dll to C:\windows\SysWOW64

22
Windows Config: glut
• Visual Studio 2012
• Windows (7/8)
• ====================

• On 32bit versions of windows:


– copy glut.h in include/GL folder to C:\Program Files\Microsoft Visual Studio
11.0\VC\include\gl
– copy glut32.lib in lib folder to C:\Program Files\Microsoft Visual Studio
11.0\VC\lib
– copy glut32.dll to C:\windows\system32
• On 64bit versions of windows:
– copy glut.h in include/GL folder to C:\Program Files (x86)\Microsoft Visual Studio
11.0\VC\include\gl
– copy glut32.lib in lib folder to C:\Program Files (x86)\Microsoft Visual Studio
11.0\VC\lib\amd64
– copy glut32.lib in lib folder to C:\Program Files (x86)\Microsoft Visual Studio
11.0\VC\lib
– copy glut32.dll to C:\windows\SysWOW64
23
Windows Config: glut
• CodeBlocks 16.01MinGw
[https://sourceforge.net/projects/codeblocks/files/Binaries/16.01/Windows/codeblocks
-16.01mingw-setup.exe/download]
• Windows (7/8/10)
• ====================

• On 32bit versions of windows:


– copy glut.h in include/GL folder to C:\Program
Files(x86)\CodeBlocks\MinGW\include\GL
– copy glut32.lib in lib folder to C:\Program Files (x86)\CodeBlocks\MinGW\lib
– copy glut32.dll to C:\windows\system32
• New Project-> Glut Project
• Select Glut Location
– C:\Program Files (x86)\CodeBlocks\MinGW

24
Windows Config: glut

• New Project-> Glut Project


• Select Glut Location
– C:\Program Files (x86)\CodeBlocks\MinGW

25

You might also like