![Page 1: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/1.jpg)
GRAFIKA KOMPUTER~ M. Ali Fauzi
![Page 2: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/2.jpg)
Your First OpenGL Program
![Page 3: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/3.jpg)
Simple Program Architecture
Inisialisasi
Update logika
Rendering
De-Inisialisasi
Keluar ?
![Page 4: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/4.jpg)
RECALL
![Page 5: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/5.jpg)
Recall
OpenGL can’t performing windowing tasks or obtaining user input, but GLUT
![Page 6: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/6.jpg)
THE CODE
![Page 7: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/7.jpg)
#include <windows.h>
#include <GL/glut.h>
void display() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f);
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutCreateWindow("OpenGL Setup Test");
glutInitWindowSize(320, 320);
glutInitWindowPosition(50, 50);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
![Page 8: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/8.jpg)
#include <windows.h>
#include <GL/glut.h>
The Header
// For MS Windows
![Page 9: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/9.jpg)
#include <windows.h>
#include <GL/glut.h>
The Header
// GLUT, includes glu.h and gl.h/* Handler for window-repaint event. Call back when the window first appears and whenever the window needs to be re-painted. */
![Page 10: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/10.jpg)
The Main
/* Main function: GLUT runs as a console application starting at main() */GLUT command startswith glut*
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutCreateWindow("OpenGL Setup Test");
glutInitWindowSize(320, 320);
glutInitWindowPosition(50, 50);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
![Page 11: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/11.jpg)
The Main
// Initialize GLUT
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutCreateWindow("OpenGL Setup Test");
glutInitWindowSize(320, 320);
glutInitWindowPosition(50, 50);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
![Page 12: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/12.jpg)
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);
glutCreateWindow("OpenGL Setup Test");
glutInitWindowSize(320, 320);
glutInitWindowPosition(50, 50);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
The Main
// Specify the display Mode – RGB or color Index, single or double Buffer
![Page 13: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/13.jpg)
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutCreateWindow("OpenGL Setup Test");
glutInitWindowSize(320, 320);
glutInitWindowPosition(50, 50);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
The Main
// Create a window with the given title// Set the window's initial width & height
![Page 14: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/14.jpg)
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutCreateWindow("OpenGL Setup Test");
glutInitWindowSize(320, 320);
glutInitWindowPosition(50, 50);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
The Main
// Position the window's initial top-left corner
![Page 15: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/15.jpg)
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutCreateWindow("OpenGL Setup Test");
glutInitWindowSize(320, 320);
glutInitWindowPosition(50, 50);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
The Main
// Register display callback handler for window re-paint
![Page 16: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/16.jpg)
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutCreateWindow("OpenGL Setup Test");
glutInitWindowSize(320, 320);
glutInitWindowPosition(50, 50);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
The Main
// Enter the infinitely event-processing loop
![Page 17: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/17.jpg)
void display() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f);
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush();
}
The Display
// Set background color to black and opaque
![Page 18: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/18.jpg)
void display() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f);
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush();
}
The Display
// Clear the color buffer
![Page 19: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/19.jpg)
void display() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f);
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush();
}
The Display
// Draw a Red 1x1 Square centered at origin
![Page 20: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/20.jpg)
void display() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f);
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush();
}
The Display
// Red
![Page 21: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/21.jpg)
void display() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f);
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush();
}
The Display
// Each set of 4 vertices form a quad
![Page 22: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/22.jpg)
void display() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f);
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush();
}
The Display
// Render
![Page 23: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/23.jpg)
OPENGL COMMAND SYNTAX
![Page 24: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/24.jpg)
Command Syntax
OpenGL commands use the prefix gl and initial capital letters for each word making up the command name (recall glClearColor(), for example)
![Page 25: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/25.jpg)
Command Syntax
OpenGL defined constants begin with GL_, use all capital letters, and use underscores to separate words (for example,GL_SINGLE).
![Page 26: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/26.jpg)
Command Syntax
You might also have noticed some seemingly extraneous letters appended to some command names (forexample, the 3f in glColor3f()and 2f in glVertex2f()).
![Page 27: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/27.jpg)
Command Syntax
glVertex2f()
Number of Component
2 – (x, y)
3 – (x, y, z)
4 – (x, y, z, w)
Data Typef - floati – integerd – doubleEtc.
![Page 28: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/28.jpg)
Command Syntax
![Page 29: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/29.jpg)
Command Syntax
Thus, the two commands are equivalent
glVertex2i(1, 3);
glVertex2f(1.0, 3.0);
![Page 30: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/30.jpg)
Command Syntax
> When only x and y are
specified, z defaults to 0.0and w defaults to 1.0.
> When x, y, and z are
specified, w defaults to 1.0.
![Page 31: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/31.jpg)
Command Syntax
Thus, the two commands are equivalent
glVertex2i(1, 3);
glVertex3f(1.0, 3.0, 0.0);
![Page 32: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/32.jpg)
Command Syntax
Some OpenGL commands can take a final letter v, which indicates that the command takes a pointer to a vector (or array) of values, rather than a series of individual arguments.
![Page 33: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/33.jpg)
Command Syntax
glColor3f(1.0, 0.0, 0.0);
GLfloat color_array[] = {1.0, 0.0, 0.0};
glColor3fv(color_array);
![Page 34: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/34.jpg)
OPENGL AS A STATE MACHINE
![Page 35: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/35.jpg)
Command Syntax
OpenGL is a state machine, particularly if you’re using the fixed-function pipeline. You put it into various states (or modes) that then remain in effect until you change them.
![Page 36: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/36.jpg)
void display() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f);
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush();
}
The Display
// Red
![Page 37: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/37.jpg)
void display() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush();
}
The Display
// Green
![Page 38: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/38.jpg)
GLUT CALLBACK FUNCTIONS
![Page 39: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/39.jpg)
Callback Func
> Your OpenGL program will be in infinite loop> Event-driven: Programs that use windows
~ Input/Output~ Wait until an event happens and then execute some pre-defined functions according to the user’s input
![Page 40: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/40.jpg)
Callback Func
> Your OpenGL program will be in infinite loop> Event-driven: Programs that use windows
~ Input/Output~ Wait until an event happens and then execute some pre-defined functions according to the user’s input
![Page 41: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/41.jpg)
Callback Func
Events – key press, mouse button press and release, window resize, etc.
![Page 42: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/42.jpg)
Callback Func
Callback function : Routine to call when an event happens
~ Window resize or redraw~ User input (mouse, keyboard)~ Animation (render many frames)
![Page 43: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/43.jpg)
Callback Func
“Register” callbacks with GLUT
glutDisplayFunc( my_display_func );
glutIdleFunc( my_idle_func );
glutKeyboardFunc(my_key_events_func);
glutMouseFunc (my_mouse_events_func);
![Page 44: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/44.jpg)
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutCreateWindow("OpenGL Setup Test");
glutInitWindowSize(320, 320);
glutInitWindowPosition(50, 50);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Callback Func
// Register display callback handler for window re-paint
![Page 45: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/45.jpg)
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutCreateWindow("OpenGL Setup Test");
glutInitWindowSize(320, 320);
glutInitWindowPosition(50, 50);
glutDisplayFunc(display);
glutIdleFunc( my_idle_func );
glutKeyboardFunc(my_key_events_func);
glutMouseFunc (my_mouse_events_func);
glutMainLoop();
return 0;
}
Callback Func
![Page 46: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/46.jpg)
Rendering Callbacks
> Callback function where all our drawing is done> Every GLUT program must have a display callback
glutDisplayFunc( my_display_func );
/* this part is in main.c */
![Page 47: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/47.jpg)
Rendering Callbacks
glutDisplayFunc( my_display_func );
/* this part is in main.c */
void my_display_func (void ){glClear( GL_COLOR_BUFFER_BIT );glBegin( GL_TRIANGLE );glVertex3fv( v[0] );glVertex3fv( v[1] );glVertex3fv( v[2] );
glEnd();glFlush();
}
![Page 48: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/48.jpg)
Idle Callbacks
> Use for animation and continuous update
~ Can use glutTimerFunc or timed callbacks for animations
glutIdleFunc( idle );
![Page 49: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/49.jpg)
Idle Callbacks
glutIdleFunc( idle );
void idle( void ){
/* change something */t += dt;glutPostRedisplay();
}
![Page 50: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/50.jpg)
User Input Callbacks
> Process user input
glutKeyboardFunc(my_key_events);
![Page 51: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/51.jpg)
User Input Callbacks
glutKeyboardFunc(my_key_events);
void my_key_events(char key, int x, int y){switch ( key ) {case ‘q’ : case ‘Q’ :
exit ( EXIT_SUCCESS);break;
case ‘r’ : case ‘R’ :rotate = GL_TRUE;break;
}}
![Page 52: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/52.jpg)
Mouse Callbacks
> Captures mouse press and release events
glutMouseFunc( my_mouse );
![Page 53: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/53.jpg)
Mouse Callbacks
glutMouseFunc( my_mouse );
void myMouse(int button, int state, int x, int y)
{if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{…}
}
![Page 54: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/54.jpg)
Events in OpenGLEvent Example OpenGL Callback Function
Keypress KeyDown
KeyUp
glutKeyboardFunc
Mouse leftButtonDown
leftButtonUp
glutMouseFunc
Motion With mouse press
Without
glutMotionFunc
glutPassiveMotionFunc
Window Moving
Resizing
glutReshapeFunc
System Idle
Timer
glutIdleFunc
glutTimerFunc
Software What to draw glutDisplayFunc
![Page 55: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/55.jpg)
Event Queue
Event queue
Keyboard
Mouse
Window
….
Mouse_callback() {….{
Keypress_callback() {….{
window_callback() {….{
MainLoop()
![Page 56: GRAFIKA KOMPUTERmalifauzi.lecture.ub.ac.id/files/2016/02/Your-First-OpenGL-Program.pdf · GRAFIKA KOMPUTER ~ M. Ali Fauzi. Your First OpenGL Program. Simple Program Architecture Inisialisasi](https://reader036.vdocuments.site/reader036/viewer/2022062606/5fe6fbe4a7210e17a42e5fe6/html5/thumbnails/56.jpg)
Cheers, Old Sport~ M. Ali [email protected]