Pemrograman
OpenGL Dasar
Materi 03
Grafik Komputer 1
The Programmer’s
Interface
Programmer sees the graphics
system through a software interface:
the Application Programmer
Interface (API)
API Contents
Functionsthat specify what we need to
form an image
Objects
Viewer
LightSource(s)
Materials
Other information
Inputfrom devices such as mouse and
keyboard
Capabilities of system
Object Specification
MostAPIs support a limited set of
primitives including
Points (0D object)
Line segments (1D objects)
Polygons (2D objects)
Some curves and surfaces
Quadrics
Parametric polynomials
All
are defined through locations in
space or vertices
OpenGL
The success of GL lead to OpenGL
(1992), a platform-independent API
that was
Easy to use
Close enough to the hardware to get
excellent performance
Focus on rendering
Omitted windowing and input to avoid
window system dependencies
OpenGL Libraries
OpenGL core library
OpenGL32 on Windows
GL on most unix/linux systems (libGL.a)
OpenGL Utility Library (GLU)
Provides functionality in OpenGL core but
avoids having to rewrite code
Links with window system
GLX for X window systems
WGL for Windows
AGL for Macintosh
GLUT
OpenGL Utility Toolkit (GLUT)
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
No slide bars
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
Example
type of object
location of vertex
glBegin(GL_POLYGON)
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 1.0, 0.0);
glVertex3f(0.0, 0.0, 1.0);
glEnd( );
end of object definition
OpenGL Primitives
GL_POINTS GL_POLYGON
GL_LINES GL_LINE_STRIP
GL_LINE_LOOP
GL_TRIANGLES
GL_QUAD_STRIP
GL_TRIANGLE_STRIP GL_TRIANGLE_FAN
A Simple Program
Generate a square on a solid
background
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();
}
OpenGL #defines
Most constants are defined in the
include files gl.h, glu.h and glut.h
Note #include <GL/glut.h> should
automatically include the others
Examples
glBegin(GL_POLYGON)
glClear(GL_COLOR_BUFFER_BIT)
includefiles also define OpenGL data
types: GLfloat, GLdouble,….
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
Defaults
simple.c is too simple
Makes heavy use of state variable
default values for
Viewing
Colors
Window parameters
Nextversion will make the defaults
more explicit
Program Structure
Most OpenGL programs have a similar structure
that consists of the following functions
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
In this version, we shall see the same
output but we have defined all the
relevant state values through
function calls using the default values
In particular, we set
Colors
Viewing conditions
Window properties
main.c
#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);
display callback
init(); set OpenGL state
glutMainLoop();
} 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
Properties logically ORed together
glutWindowSize in pixels
glutWindowPosition from top-left corner of display
glutCreateWindow create window with title “simple”
glutDisplayFunc display callback
glutMainLoop enter infinite event loop
init.c
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
RGB color
Each color component is stored separately
in the frame buffer
Usually 8 bits per component in buffer
Note in glColor3f the color values range
from 0.0 (none) to 1.0 (all), whereas in
glColor3ub the values range from 0 to
255
Indexed Color
Colors are indices into tables of RGB values
Requires less memory
indices usually 8 bits
not as important now
Memory inexpensive
Need more colors for shading
Color and State
The color as set by glColor becomes part of
the state and will be used until changed
Colors and other attributes are not part of
the object but are assigned when the
object is rendered
We can create conceptual vertex colors by
code such as
glColor
glVertex
glColor
glVertex
Smooth Color
Default is smooth shading
OpenGL interpolates vertex colors across
visible polygons
Alternative is flat shading
Color of first vertex
determines fill color
glShadeModel
(GL_SMOOTH)
or GL_FLAT
Rangkuman
API berfungsi sebagai perantara
antara aplikasi dengan hardware
Membuat tampilan 2 dimensi
sederhana menggunakan OpenGL
Penjelasan Fungsi-fungsi dasar
pembentuk program OpenGL
Contoh Soal
Buat tampilan sebagai berikut:
Jawaban
#include "stdafx.h"
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glClearColor(1.0,1.0,1.0,1.0);
glColor3f(1.0,0.0,0.0);
glVertex3f(-2.0,-2.0,0.0);
glClearColor(1.0,1.0,1.0,1.0);
glColor3f(0.0,1.0,0.0);
glVertex3f(0.0,2.0,0.0);
glClearColor(1.0,1.0,1.0,1.0);
glColor3f(0.0,0.0,1.0);
glVertex3f(2.0,-2.0,0.0);
glEnd();
glFlush();
}
void myinit()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-2.0,2.0,-2.0,2.0);
glMatrixMode(GL_MODELVIEW);
glClearColor(1.0,1.0,1.0,1.0);
glColor3f(0.0,0.0,0.0);
}
int main(int argc, char* argv[])
{
if (argv[1] != NULL)
{ n=atoi(argv[1]);
}
else n=5;
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("Segitiga Warna");
glutDisplayFunc(display);
myinit();
glutMainLoop();
return 0;
}
Contoh Soal
Buatlah tampilan program
Sierpinski Gasket
Referensi
Edward Angel, “Interactive
Computer Graphics Fourth
Edition”, Pearson, 2006, ch 2, p 46
– 84
F. S. Hill, Jr., “Computer Graphics
Using OpenGL Second Edition”,
Prentice Hall, 2001, ch 2, p 39 - 63