5 0 777 KB
Praktikum Grafika Komputer February 4, 2015
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI A. TUJUAN -
Memahami jenis-jenis primitive objects.
-
Memahami dan dapat membuat objek primitif.
-
Memahami penerapan Objek primitif menjadi bangun 2 dimensi dasar.
-
Memahami dan dapat membuat fungsi untuk bangun 2 dimensi dasar.
B. JOBSHEET PRAKTIKUM 1. Jobsheet 1: Script Dasar Source code: glutInitWindowPosition(100,100); glutInitWindowSize(320,240); gluOrtho2D(-320.,320.,-240.,240.);
Penjelasan: merupakan script dasar dalam penggunaan program untuk mengatur ukuran widows dan posisi windows 2. Jobsheet 2: Source code: #include #include void drawDot(void){ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POINTS); glVertex2i(-200, -100); glVertex2i(200, 100); glVertex2i(250, 150); glEnd(); glFlush(); } void main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(500,200); glutInitWindowSize(640,480); gluOrtho2D(-320.,320.,-240.,240.); glutCreateWindow("Modul 2"); glutDisplayFunc(drawDot); glutMainLoop(); }
Output program:
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 1
Praktikum Grafika Komputer February 4, 2015
Penjelasan: tampilan output program kosong. 3. Jobsheet 3: Source code: a. #include #include void drawDot(void){ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POINTS); glVertex2i(18, 200); glVertex2i(100, 100); glVertex2i(200, 200); glEnd(); glFlush(); } void main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(600,400); gluOrtho2D(-320.,320.,-240.,240.); glutCreateWindow("Modul 2"); glutDisplayFunc(drawDot); glutMainLoop(); }
Output program:
b. #include #include void drawDot(void){ glPointSize(10); glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POINTS);
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 2
Praktikum Grafika Komputer February 4, 2015 glVertex2i(50, 0); glVertex2i(50, 50); glVertex2i(0, 0); glEnd(); glFlush(); } void main(int argc, char **argv){ glutCreateWindow("Pemrograman Grafis GLUT"); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawDot); glutMainLoop(); }
Output program:
c. #include #include void drawDot(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POINTS); glVertex2i(50, 0); glPointSize(10); glVertex2i(50, 50); glVertex2i(0, 0); glEnd(); glFlush(); } void main(int argc, char **argv){ glutCreateWindow("Pemrograman Grafis GLUT"); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawDot); glutMainLoop(); }
Output program:
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 3
Praktikum Grafika Komputer February 4, 2015
Pejelasan: program menampilkan titik ketebalan titik berbeda karena GL point size letaknya diubah pada script sesuai dengan letak koordinat. 4. Jobsheet 4: Source code: #include #include void drawLine(){ glLineWidth(35); glBegin(GL_LINES); glColor3f(1.,0.,0.); glVertex2d(0.0,-0.8); glVertex2d(9.9,8.9); glEnd(); glFlush(); } void main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(500,200); glutInitWindowSize(640,480); gluOrtho2D(-320.,320.,-240.,240.); glutCreateWindow("Modul 2"); glutDisplayFunc(drawLine); glutMainLoop(); }
Output program:
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 4
Praktikum Grafika Komputer February 4, 2015 Penjelasan:Program menampilkan garis dengan koordinat yang telah ditentukan karena ukuran dari garis melebihi ukuran jendela program maka yang ditampilkan tidak semuanya. 5. Jobsheet 5: Source code: a. #include #include void drawLine(){ glLineWidth(20); glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); glVertex2d(18, 200); glVertex2d(100, 100); glVertex2d(200, 200); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutCreateWindow("Modul 2"); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawLine); glutMainLoop(); }
Output program:
b. #include #include void drawLine(){ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); glVertex2d(18, 200);
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 5
Praktikum Grafika Komputer February 4, 2015 glVertex2d(100, 100); glLineWidth(20); glVertex2d(200, 200); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutCreateWindow("Modul 2"); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawLine); glutMainLoop(); }
Output program:
c. source code: #include #include void drawLine(){ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); glVertex2d(18, 200); glVertex2d(100, 100); glVertex2d(200, 200); glLineWidth(20); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutCreateWindow("Modul 2"); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawLine); glutMainLoop();
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 6
Praktikum Grafika Komputer February 4, 2015 }
Output progam:
Penjelasan: Hampir sama dengan program yang menampilkan titik sebelumnya,GL point size kita ubah letaknya pada script untuk menampilkan ukuran dan ketebalan garis yang berbeda. 6. Jobsheet 6: Source code: #include #include void drawPoliline(void) { glBegin(GL_LINE_STRIP); glVertex2d(18, 200); glVertex2d(100, 100); glVertex2d(200, 200); glVertex2d(200, 200); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); glutCreateWindow("Modul 2"); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawPoliline); glutMainLoop(); }
Output program:
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 7
Praktikum Grafika Komputer February 4, 2015
Penjelasan: Program ini menampilkan segitiga dengan sisi bagian atas ukuran garisnya tidak terlalu besar,sehingga tampilan garisnya tipis. 7. Jobhseet 7: Source code: #include #include void drawSimetris(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINE_LOOP); glVertex2d(18, 200); glVertex2d(100, 100); glVertex2d(200, 200); glVertex2d(200, 200); glVertex2d(200, 200); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); glutCreateWindow("Modul 2"); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawSimetris); glutMainLoop(); }
Output program:
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 8
Praktikum Grafika Komputer February 4, 2015 Penjelasan: Program ini menampilkan segitiga yang hampir sama dengan sebelumnya,namu sisi bagian atasya terlihat. 8. Jobsheet 8: Source code: #include #include void drawSegiTiga(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex2d(18, 200); glVertex2d(100, 100); glVertex2d(200, 200); glVertex2d(100, 50); glVertex2d(50, 200); glVertex2d(-50, -50); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); glutCreateWindow("Modul 2"); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawSegiTiga); glutMainLoop(); }
Output program:
Penjelasan: Program menampilkan dua segitiga yang terpisah,namun ada beberapa bagian yang saling terhubung,hal ini terjadi karena
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 9
Praktikum Grafika Komputer February 4, 2015 9. Jobsheet 9: Source code: #include #include void drawBangunBebas(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLE_STRIP); glVertex2d(100, 200); glVertex2d(200, 100); glVertex2d(250, 250); glVertex2d(50, 50); glVertex2d(50, 50); glVertex2d(-50, -50); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); glutCreateWindow("Modul 2"); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawBangunBebas); glutMainLoop(); }
Output program:
Penjelasan: Program ini hampir sama dengan sebelumnya namun bentuknya bebas dengan menggunakan prinsip segitiga.
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 10
Praktikum Grafika Komputer February 4, 2015 10. Jobsheet 10: Source code: #include #include void drawTriangleFan(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLE_FAN); glVertex2d(100, 200); glVertex2d(200, 100); glVertex2d(250, 250); glVertex2d(50, 50); glVertex2d(50, 50); glVertex2d(-50, -50); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("Pemograman Grafis GLUT : Khafid"); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawTriangleFan); glutMainLoop(); }
Output program:
Penjelasan: Program ini menggunakan triangle_fan yang titik koordinatnya berpusat.
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 11
Praktikum Grafika Komputer February 4, 2015 11. Jobsheet 11: Source code: #include #include void drawLine(void){ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); glVertex2d(100, 100); glVertex2d(150, 100); glVertex2d(150, 150); glVertex2d(100, 150); glVertex2d(190, 100); glVertex2d(240, 100); glVertex2d(240, 150); glVertex2d(190, 150); glEnd(); glFlush(); } void main(int argc, char **argv){ glutCreateWindow("Modul 2"); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawLine); glutMainLoop(); }
Output program:
Penjelasan: Program menampilkan dua buah segi empat yang terpisah,untuk membuat segi empat menggunakan GL_QUADS
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 12
Praktikum Grafika Komputer February 4, 2015 12. Jobsheet 12: Source code: #include #include void drawLine(void){ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUAD_STRIP); glVertex2d(200, 50); glVertex2d(200, 100); glVertex2d(175, 200); glVertex2d(175, 150); glVertex2d(-50, 100); glVertex2d(75, -100); glEnd(); glFlush(); } void main(int argc, char **argv){ glutCreateWindow("Modul 2"); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawLine); glutMainLoop(); }
Output program:
Penjelasan: Menampilkan objek bangun bebas dengan fungsi GL_QUADS_STRIP. Memliki 6 titik koordinat.
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 13
Praktikum Grafika Komputer February 4, 2015 13. Jobsheet 13: Source code: #include #include void drawLine(void){ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glVertex2d(50, 100); glVertex2d(150, 50); glVertex2d(250, 100); glVertex2d(220, 150); glVertex2d(250, 200); glVertex2d(150, 150); glVertex2d(50, 200); glVertex2d(0, 150); glEnd(); glFlush(); } void main(int argc, char **argv){ glutCreateWindow("Modul 2"); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); gluOrtho2D(-320., 320., -240., 240.); glutDisplayFunc(drawLine); glutMainLoop(); }
Output program:
Penjelasan: Objek bebas kali ini menggunakan polygon
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 14
Praktikum Grafika Komputer February 4, 2015 a. Object 2D: Persegi Panjang Source code: #include #include void segiEmpat(int posx,int posy,int w, int h){ glBegin(GL_QUADS); glVertex2i(posx,posy);// posisi a glVertex2i(w+posx,posy);// posisi b glVertex2i(w+posx,posy-h);// posisi c glVertex2i(posx,posy-h);// posisi d glEnd(); } void renderScene(void){ glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.,0.,0.); segiEmpat(-200,200,100,100); glColor3f(0.,1.,0.); segiEmpat(100,200,150,150); glColor3f(0., 0., 1.); segiEmpat(0, 0, 50, 50); glFlush(); } void main(int argc,char **argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE |GLUT_RGBA); glutInitWindowPosition(100,200); glutInitWindowSize(320,240); glutCreateWindow("Modul 2"); gluOrtho2D(-320,320,-240,240); glutDisplayFunc(renderScene); glutMainLoop(); }
Output program:
Penjelasan: menampilkan persegi dengan posisi,dimensi,serta warna yang berbeda. Agar efisien menggunakan
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 15
Praktikum Grafika Komputer February 4, 2015
b. Objek 2D: Trapesium siku #include #include void segiEmpat(int posx, int posy, int w, int h){ glBegin(GL_QUADS); glVertex2i(posx + w, posy); glVertex2i(posx, posy); glVertex2i(posx - (w), posy - h); glVertex2i(posx + w, posy - h); glEnd(); } void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1., 0., 0.); segiEmpat(100, 80, 20, 60); glColor3f(0., 1., 1.); segiEmpat(-100, 90, 50, 70); glColor3f(0., 0., 1.); segiEmpat(0, -40, 100, 40); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE |GLUT_RGBA); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); glutCreateWindow("Modul 2"); gluOrtho2D(-320.0, 320.0, -240.0, 240.0); glutDisplayFunc(renderScene); glutMainLoop(); }
Output program:
Penjelasan: deklrasi koordinat untuk membuat titik yang jika dihubungkan akan membentuk jajar genjang
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 16
Praktikum Grafika Komputer February 4, 2015
c. Objek 2D: Trapesium sama kaki Source code: #include #include void segiEmpat(int posx, int posy, int w, int h){ glBegin(GL_QUADS); glVertex2i(posx, posy); glVertex2i(posx + w, posy); glVertex2i(posx + 2 * w, posy - h); glVertex2i(posx - w, posy - h); glEnd(); } void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(0., 0., 1.); segiEmpat(40, 40, 70, 50); glColor3f(0., 1., 0.); segiEmpat(-90, -10, 20, 70); glColor3f(1., 0., 0.); segiEmpat(80, 120, 80, 40); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); glutCreateWindow("Modul 2"); gluOrtho2D(-320.0, 320.0, -240.0, 240.0); glutDisplayFunc(renderScene); glutMainLoop(); }
Output program:
d. Objek 2D: Jajar Genjang Source code:
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 17
Praktikum Grafika Komputer February 4, 2015 #include #include void segiEmpat(int posx, int posy, int w, int h){ glBegin(GL_QUADS); glVertex2i(posx, posy); glVertex2i(posx + w, posy); glVertex2i(posx + (w / 2), posy - h); glVertex2i(posx - (w / 2), posy - h); glEnd(); } void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1., 0., 0.); segiEmpat(10, 50, 100, 80); glColor3f(0., 1., 0.); segiEmpat(-20, -40, 40, 30); glColor3f(0., 0., 1.); segiEmpat(-90, -20, 50, 40); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); glutCreateWindow("Modul 2"); gluOrtho2D(-320.0, 320.0, -240.0, 240.0); glutDisplayFunc(renderScene); glutMainLoop(); }
Output program:
Penjelasan: program menampilkan jajar genjang dengan koordinat,ukuran,dan warna yang berbeda. Untuk mengatur koordinat dari jajar genjang kita membuat deklrasi berikut
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 18
Praktikum Grafika Komputer February 4, 2015
C. TUGAS ASISTENSI -
Tugas Asistensi 1: Membuat objek belah ketupat source code: #include #include void segiEmpat(int posx,int posy,int w, int h){ glBegin(GL_QUADS); glVertex2i(posx,posy);// posisi a glVertex2i(posx+w,posy-h);// posisi b glVertex2i(posx,posy-h);// posisi c glVertex2i(posx-w,posy-h);// posisi d glEnd(); } void renderScene(void){ glClear(GL_COLOR_BUFFER_BIT); glColor3f(1,1,0); //warna kuning segiEmpat(-180,200,90,90); glColor3f(1,1,0); //warna kuning segiEmpat(-180,20,-90,-90); glColor3f(0,0,1); //biru tua segiEmpat(0,70,60,60); glColor3f(0,0,1); //biru tua segiEmpat(0,-50,-60,-60); glColor3f(1,1,1); //putih segiEmpat(180,-40,30,30); glColor3f(1,1,1); //putih segiEmpat(180,-100,-30,-30);
glFlush(); } void main(int argc,char **argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE |GLUT_RGBA); glutInitWindowPosition(100,200); glutInitWindowSize(320,240); glutCreateWindow("Belah Ketupat"); gluOrtho2D(-320,320,-240,240); glutDisplayFunc(renderScene); glutMainLoop(); }
Output program:
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 19
Praktikum Grafika Komputer February 4, 2015
Penjelasan: Program ini menampilkan 3 belah ketupat yang memiliki ukuran,posisi serta warna yang berbeda. Untuk membuat belah ketupat program ini menggunakan QUADS untuk menghubungkan 4 titik agar saling terhubung. -
Tugas Asistensi 2: Source code: #include #include void segiEmpat(int posx,int posy,int w, int h){ glBegin(GL_QUADS); glVertex2i(posx,posy);// posisi a glVertex2i(posx+w,posy-h);// posisi b glVertex2i(posx,posy-3*h);// posisi c glVertex2i(posx-w,posy-h);// posisi d glEnd(); } void renderScene(void){ glClear(GL_COLOR_BUFFER_BIT); glColor3f(1,1,0); //kuning segiEmpat(-180,100,90,90); glColor3f(0,0,1); //biru segiEmpat(0,100,60,60); glColor3f(1,1,1); //putih segiEmpat(90,100,30,30); glFlush(); } void main(int argc,char **argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE |GLUT_RGBA); glutInitWindowPosition(100,200); glutInitWindowSize(320,240); glutCreateWindow("Layang-Layang"); gluOrtho2D(-320,320,-240,240); glutDisplayFunc(renderScene); glutMainLoop(); }
PRIMITIVE OBJECTS DAN OBJEK 2 DIMENSI
Page 20
Praktikum Grafika Komputer February 4, 2015 Output program:
Penjelasan: Hampir sama dengan program sebelumnya,program kali ini menampilkan objek 2D segi empat yaitu layang-layang menggunakan QUADS juga agar 4 titik yang dibuat dapat saling terhubung. Deklarasi tiap-tiap posisi titik adalah sebagai berikut glVertex2i(posx,posy);// posisi a glVertex2i(posx+w,posy-h);// posisi b glVertex2i(posx,posy-3*h);// posisi c glVertex2i(posx-w,posy-h);// posisi d
-
Tugas Asistensi 3: Source code: #include "stdlib.h" #include "glut.h" #include "math.h" const double PI = 3.141592653589793; int i; void back(){ glBegin(GL_QUADS); glColor3f(1,1,1); glVertex2d (-150,150); glVertex2d(150,150); glVertex2d(150,-150); glVertex2d (-150,-150); glEnd(); }
void lingkaran(int radius, int jumlah_titik, int x_tengah, int y_tengah) { glBegin(GL_POLYGON); for (i=0;i