0% found this document useful (0 votes)
163 views27 pages

Introduction To OpenGL

This document provides an introduction to OpenGL. It discusses the OpenGL API and libraries, including GL, GLU, and GLUT. It describes the software organization and function format in OpenGL. It also covers topics like transformations, callbacks, event loops, and how to set up OpenGL in Windows. The document is intended to familiarize programmers with the basic concepts and components of the OpenGL graphics library.

Uploaded by

gouthamnaik
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
163 views27 pages

Introduction To OpenGL

This document provides an introduction to OpenGL. It discusses the OpenGL API and libraries, including GL, GLU, and GLUT. It describes the software organization and function format in OpenGL. It also covers topics like transformations, callbacks, event loops, and how to set up OpenGL in Windows. The document is intended to familiarize programmers with the basic concepts and components of the OpenGL graphics library.

Uploaded by

gouthamnaik
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 27

Introduction to OpenGL

TA: Xiaolin Yang


CISC 440/640
[email protected]
The Programmer’s Interface
 Programmer sees the graphics system
through a software interface: the
Application Programmer Interface (API)
OpenGL Libraries
 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
Software Organization

application program

OpenGL Motif
widget or similar GLUT
GLX, AGL
or WGL GLU

X, Win32, Mac O/S GL

software and/or hardware


OpenGL function format
function name
dimensions

glVertex3f(x,y,z)

x,y,z are floats


belongs to GL library

glVertex3fv(p)

p is a pointer to an array
simple.c
#include <GL/glut.h>
void mydisplay(){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
int main(int argc, char** argv){
glutCreateWindow("simple");
glutDisplayFunc(mydisplay);
glutMainLoop();
}
Event Loop
 Note that the program defines a display
callback function named mydisplay
• Every glut program must have a display
callback
• The display callback is executed whenever
OpenGL decides the display must be
refreshed, for example when the window is
opened
• The main function ends with the program
entering an event loop
Default parameters
 simple.c is too simple
 Makes heavy use of state variable
default values for
• Viewing
• Colors
• Window parameters
Transformations in OpenGl
 Modeling transformation
• Refer to the transformation of models (i.e., the
scenes, or objects)
 Viewing transformation
• Refer to the transformation on the camera
 Projection transformation
• Refer to the transformation from scene to
image
Model/View Transformations
 Model-view transformations are usually
visualized as a single entity
• Before applying modeling or viewing
transformations, need to set
glMatrixMode(GL_MODELVIEW)
• Modeling transforms the object
• Translation: glTranslate(x,y,z)
• Scale: glScale(sx,sy,sz)
• Rotation: glRotate(theta, x,y,z)
Projection Transformation
 Transformation of the 3D scene into the
2D rendered image plane
• Before applying projection transformations,
need to set glMatrixMode(GL_PROJECTION)
• Orthographic projection
• glOrtho(left, right, bottom, top, near, far)
• Perspective projection
• glFrustum (left, right, bottom, top, near, far)
Program Structure
 Most OpenGL programs have the following
structure
• main():
• defines the callback functions
• opens one or more windows with the required properties
• enters event loop (last executable statement)
• init(): sets the state variables
• Viewing
• Attributes
• callbacks
• Display function
• Input and window functions
simple.c revisited
#include <GL/glut.h> includes gl.h
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutCreateWindow("simple"); define window properties
glutDisplayFunc(mydisplay);

init(); display callback


glutMainLoop(); set OpenGL state
}
enter event loop
GLUT functions
 glutInit allows application to get command line
arguments and initializes system
 gluInitDisplayMode requests properties for the
window (the rendering context)
• RGB color
• Single buffering
 glutWindowSize in pixels
 glutWindowPosition from top-left corner of display
 glutCreateWindow create window with title “simple”
 glutDisplayFunc display callback
 glutMainLoop enter infinite event loop
Window Initialization
black clear color
void init() opaque window
{
glClearColor (0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 1.0, 1.0); fill/draw with white
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
}

viewing volume
Display callback function
void mydisplay()
{
glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();

glFlush();
}
Callbacks
 Programming interface for event-driven
input
 Define a callback function for each type
of event the graphics system recognizes
 This user-supplied function is executed
when the event occurs
mouse callback function
• GLUT example: glutMouseFunc(mymouse)
GLUT event loop
 Last line in main.c for a program using GLUT is the
infinite event loop
glutMainLoop();
 In each pass through the event loop, GLUT
• looks at the events in the queue
• for each event in the queue, GLUT executes the
appropriate callback function if one is defined
• if no callback is defined for the event, the event is ignored
 In main.c
• glutDisplayFunc(mydisplay) identifies the function to
be executed
• Every GLUT program must have a display callback
Post redisplays
 Many events may invoke the display callback
function
• Can lead to multiple executions of the display callback on a
single pass through the event loop
 We can avoid this problem by instead using
glutPostRedisplay();
which sets a flag.
 GLUT checks to see if the flag is set at the end of the
event loop
• If set then the display callback function is executed
Using the idle callback
 The idle callback is executed whenever there are no events in the event queue
• glutIdleFunc(myidle)
• Useful for animations
void myidle() {
/* change something */
t += dt
glutPostRedisplay();
}

Void mydisplay() {
glClear();
/* draw something that depends on t */
glutSwapBuffers();
}
Using globals
 The form of all GLUT callbacks is fixed
• void mydisplay()
• void mymouse(GLint button, GLint state, GLint
x, GLint y)
 Must use globals to pass information to callbacks

float t; /*global */

void mydisplay()
{
/* draw something that depends on t
}
Assignment policy
 How to submit
 What to submit
 On late submission
How to submit
 Submit as a tar/zip file
• Unix:
> tar -cf username_projectNum_(440|640).tar
projectDir
> gzip username_projectNum_(440|640).tar
• Windows:
• Use a zip utility
 Naming convention
• username_projectNum_(440|640).(tar.gz|zip)
 Submit the tar/zip file to [email protected]
What to submit
 Must contain
• Readme
• Source codes
• Output figures (if any)
 Must NOT contain
• obj intermediate files
• obj data files
What to submit: Readme
% My name
% My email: [email protected]
% Project Num

% Part 1: description of this project


This project is to apply xxx algorithm to plot xxx, …

% Part 2: what I did and what I didn't do


I completed all/most/some functionalities required in this project.
The system is robust and the rendering is fairly efficient, …

I didn't do …. The reason is ….

% Part 3: What files contained, what’s the function of each file.

% Part 4: How to compile and how to run


The project is developed in windows system and tested in stimpy (strauss) unix
system
OpenGL: Setup in Windows
 Go to the GLUT webpage
• www.xmission.com/~nate/glut.html
 Follow the instructions in
• http://www.lighthouse3d.com/opengl/glut/
 When creating the Visual C/C++
project, use the console based setup
Office Hours
 Tuesday 7:00 – 9:00 pm
 McKinly 051
 Email – [email protected]

You might also like