5-REVIEW Open GL
5-REVIEW Open GL
GLUT
Warna
Viewing dasar
Viewer
LightSource(s)
Materials
Other information
Inputfrom devices such as mouse and keyboard
Capabilities of system
Object Specification
Most APIs support a limited set of primitives
including
Points (0D object)
Line segments (1D objects)
Polygons (2D objects)
Some curves and surfaces
Quadrics
Parametric polynomials
Menus
Event-driven
application program
OpenGL Motif
widget or similar GLUT
GLX, AGL
or WGL GLU
glVertex3f(x,y,z)
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( );
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
Mostconstants 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)
include
files 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
Latihan
Buatlah Program yang menampilkan kotak ini
Defaults
simple.c is too simple
Makes heavy use of state variable default values
for
Viewing
Colors
Window parameters
Next version 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
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
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);
}
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
Menggambar Titik :
glBegin(GL_POINTS)
glBegin(GL_LINES) ;
glVertex2i(100,100);
glVertex2i(200,150);
glEnd( );
Void drawLine ( int x1, int y1, int x2, int y2)
{
glBegin(GL_LINES):
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glEnd( );
}
glBegin(GL_LINES) ;
glVertex2f(100,100);
glVertex2f(200,150);
glEnd( );
Void drawLine ( float x1, float y1, float x2, float y2)
{
glBegin(GL_LINES):
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glEnd( );
}
glBegin(GL_LINES) ;
glVertex2d(100,100);
glVertex2d(200,150);
glEnd( );
Void drawLine ( double x1, double y1, double x2, double y2)
{
glBegin(GL_LINES):
glVertex2d(x1,y1);
glVertex2d(x2,y2);
glEnd( );
}
glBegin(GL_LINE_STRIP) ;
glVertex2i(100,100);
glVertex2i(200,150);
glVertex2i(300,50);
glEnd( );
Void drawLine ( int x1, int y1, int x2, int y2, int x3, int y3)
{
glBegin(GL_LINE_STRIP):
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glEnd( );
}
204481 Foundation of Computer Graphics April 18, 2020 40
Menggambar PolyLine : Tipe float 4 titik
glBegin(GL_LINE_STRIP) ;
glVertex2f(100,100);
glVertex2f(200,150);
glVertex2f(300,50);
glVertex2f(400,200);
glEnd( );
Void drawLine ( float x1, float y1, float x2, float y2, float x3, float y3, float x4,
float y4)
{
glBegin(GL_LINE_STRIP):
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glVertex2f(x3,y3);
glVertex2f(x4,y4);
glEnd( );
204481 Foundation of Computer Graphics April 18, 2020 41
Menggambar PolyLine : Tipe double 5 titik
glBegin(GL_LINE_STRIP) ;
glVertex2d(100,100);
glVertex2d(200,150);
glVertex2d(300,50);
glVertex2d(400,200);
glVertex2d(250, 250);
glEnd( );
Void drawLine ( double x1, double y1, double x2, double y2, double x3,
double y3, double x4, double y4, double x5, double y5)
{
glBegin(GL_LINE_STRIP):
glVertex2d(x1,y1);
glVertex2d(x2,y2);
glVertex2d(x3,y3);
glVertex2d(x4,y4);
glVertex2d(x5,y5);
glEnd( );
} 204481 Foundation of Computer Graphics April 18, 2020 42
Menggambar Polygon : Tipe float 4 titik
glBegin(GL_LINE_LOOP) ;
glVertex2f(100,100);
glVertex2f(200,150);
glVertex2f(300,50);
glVertex2f(400,200);
glEnd( );
Void drawLine ( float x1, float y1, float x2, float y2, float x3, float y3, float x4,
float y4)
{
glBegin(GL_LINE_LOOP);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glVertex2f(x3,y3);
glVertex2f(x4,y4);
glEnd( );
204481 Foundation of Computer Graphics April 18, 2020 43
Menggambar Polygon : Tipe integer 3 titik
glBegin(GL_LINE_LOOP) ;
glVertex2i(100,100);
glVertex2i(200,150);
glVertex2i(300,50);
glEnd( );
Void drawLine ( int x1, int y1, int x2, int y2, int x3, int y3)
{
glBegin(GL_LINE_LOOP);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glEnd( );
}
glBegin(GL_LINE_LOOP) ;
glVertex2d(100,100);
glVertex2d(200,150);
glVertex2d(300,50);
glVertex2d(400,200);
glVertex2d(250,250);
glEnd( );
Void drawLine ( double x1, double y1, double x2, double y2, double x3,
double y3, double x4, double y4, double x5, double y5)
{
glBegin(GL_LINE_LOOP);
glVertex2d(x1,y1);
glVertex2d(x2,y2);
glVertex2d(x3,y3);
glVertex2d(x4,y4);
glVertex2d(x5,y5);
glEnd( );
} 204481 Foundation of Computer Graphics April 18, 2020 45
Menggambar PolyLine :
drawPolyline(nama_objek2D, jumlah_titik)
}
glEnd ( );
}
}
glEnd ( );
}
}
glEnd ( );
}
Materi :
1) Definisi Objek Grafik 2D
2) Polyline
3) Polygon
4) Mewarnai area (fill polygon)
5) Membangun objek Grafik 2D
6) Membangun Objek Grafik 2D dgn persamaan matematika
7) Animasi 2D
Objek Grafik 2D : sekumpulan titik2 2D yg dihubungkan dgn garis lurus (polyline, polygon)
atau kurva. Menggunakan array 1 D atau linked list untuk struktur data
Langkah2 mendefinisikan :
1. Mendefinisikan struktur dari titik 2D Point2D_t
2. Mendefinisikan struktur warna Color_t
3. Mendefinisikan struktur dari objek grafik 2D sebagaia array dari titik 2D Object2D_t
typedef struct {
float r, g, b;
} color_t;
}
drawPolygon(shape, 360);
}
204481 Foundation of Computer
April 18, 2020 55 Graphics
TUGAS-1 : Gambar dg Open GL
TUGAS-2 : Gambar dg Open GL