grafika 130631100018 ainun_najib_modul1

22
LAPORAN RESMI PRAKTIKUM GRAFIKA KOMPUTER MODUL I Primitive DrawingDisusun Oleh : LABORATORIUM MICROTEACHING DAN KOMPUTER JURUSAN PENDIDIKAN INFORMATIKA FAKULTAS KEGURUAN DAN ILMU PENDIDIKAN UNIVERSITAS TRUNOJOYO MADURA T.A. 2014-2015 Disetujui : Bangkalan, ………………… (AGUS PRIYONO) 12.04.111.00056 TANGGAL PRAKTIKUM : SENIN, 30 MARET 2015 NAMA : AINUN NAJIB NRP : 130631100018 KELAS : A1 DOSEN PENGAMPU : MEDIKA RISNASARI, MT.

Upload: ainun-najib

Post on 28-Jul-2015

58 views

Category:

Engineering


1 download

TRANSCRIPT

LAPORAN RESMI

PRAKTIKUM GRAFIKA KOMPUTER

MODUL I

“Primitive Drawing”

Disusun Oleh :

LABORATORIUM MICROTEACHING DAN KOMPUTER

JURUSAN PENDIDIKAN INFORMATIKA

FAKULTAS KEGURUAN DAN ILMU PENDIDIKAN

UNIVERSITAS TRUNOJOYO MADURA

T.A. 2014-2015

Disetujui : Bangkalan, …………………

(AGUS PRIYONO)

12.04.111.00056

TANGGAL PRAKTIKUM : SENIN, 30 MARET 2015

NAMA : AINUN NAJIB

NRP : 130631100018

KELAS : A1

DOSEN PENGAMPU : MEDIKA RISNASARI, MT.

BAB I

PENDAHULUAN

1.1 Latar Belakang

Seiring dengan perkembangan teknologi infomasi dan komunikasi, yang lebih

familiar dikalangan bangsa yaitu computer, dari perkembangan tersbut terdapat

pula istilah Computer Graphic.

Computer Graphic ialah bagian ilmu computer yang berkaitan dengan

pembuatan visual, gambar, animasi atau pun game sederhana secara digital. Oleh

karena itu perkembangan ini sangat berperan aktif di kalangan informatika selain

itu juga hal ini yang menunjang sekali seperti hal di iklan, dunia film dan

semuanya.

Dalam pemanfaatan komputer grafik untuk manipulasi obyek, ada dua jenis

obyek yang bisa dimodelkan, yaitu obyek sederhana dan obyek kompleks. Obyek

sederhana dimodelkan dengan menggunakan persamaan geometri, sedangkan

obyek kompleks dimodelkan dengan merangkai banyak segitiga menjadi satu

kesatuan obyek. Obyek sederhana mudah dimodelkan tetapi bentuk yang

dihasilkan kurang bervariasi.

Sedangkan obyek kompleks lebih sulit dimodelkan tetapi bentuknya sangat

bervariasi. Untuk memodelkan obyek dengan cukup mudah dan bentuk bisa

bervariasi, biasanya digunakan gabungan dari obyek sederhana dan obyek

kompleks. Untuk menghasilkan bentuk permukaan yang lebih bervariasi, dapat

digunakan kurva bezier. Bahasa pemograman C/C++, Delphi pun juga dapat

digunakan.

Penggunaan bahasa pemrograman tersebut harus didukungan dengan IDE toll

untuk menjalankan atau untuk memudahkan user berkomunikasi dengan komputer

seperti OpenGL.

Namun, sebagian orang mengira OpenGL itu sebuah bahasa pemrograman,

itu salah OpenGL (Open Graphic Library) adalah sebuah library terdiri dari

berbagai macam fungsi dan biasanya digunakan untuk menggambar sebuah objek

2D ata 3D.

Tapi bukan berarti OpenGL adalah satu-satunya aplikasi render, pesaing

OpenGL directX (keluaran microsoft) memiliki fungsi yang hampir sama, namun

DirectX lebih banyak digunakan oleh sebagian besar game developer karena

beberapa fungsi DirectX nampaknya lebih memudahkan game developer untuk

membuat game. Tapi bukan berarti tidak ada yang memakai OpenGL, tiap-tiap

render memiliki kelebihan dan kekurangannya tersendiri. OpenGL biasanya

digunakan dengan bahasa pemrograman C/C+.

1.2 Tujuan

- Mahasiswa mampu membuat dan memanfaatkan output primitif (titik,

garis, segi empat, kurva, lingkaran, elips, fill area, dan teks).

- Mahasiswa mampu memahami dan mengerti apa itu OpenGL, CodeBlock

dan apa itu computer graphic.

- Mahasiswa memahami, mengerti fungsi dari computer graphic itu sendiri

dan mampu mengeplorasi kepada orang lain

BAB II

DASAR TEORI

2.1 TEORI

Penghasilan citra pada komputer grafik menggunakan primitif grafik dasar.

Primitif ini memudahkan untuk merender (menggambar pada ayar monitor)

sebagaimana penggunaan persamaan geometrik sederhana. Contoh primitif grafik

dasar (Gambar 1) adalah :

Titik

Garis, Segiempat

Kurva, Lingkaran, ellipse, kurva bezier, kurva lainnya

Fill area

Text

Segita

Gambar: 1. Primitif Drawing

Obyek kompleks dapat dibuat dengan kombinasi dari primitif ini. Adapun

contoh grafik primitif yang lain adalah :

- Poligaris yaitu urutan garis lurus yang saling terhubung.

- Teks adalah bentuk bahasa tulisan dengan simbol-simbol tertentu. Teks

merupakan kumpulan lebih dari dua karakter.

- Citra raster adalah gambar yang dibuat dengan piksel yang membedakan

bayangan dan warna. Citra raster disimpan dalam komputer sebagai larik

bernilai numerik. Larik tersebut dikenal sebagai piksel map atau bitmap.

Ada tiga cara untuk menghasilkan citra grafik yaitu citra didisain dengan

tangan, citra yang didapat dari perhitungan dan citra yang discan.

Pemaparan citra raster dinyatakan oleh piksel dengan video displays

(Cathod-ray Tube CRT), flat panel displays (LCD), hardcopy (printer

laser, dot matrix printers, ink-jet printers). Contoh proses pemaparan

permukaan adalah citra yang ditangkap lalu disimpan di frame buffer,

kemudian digunakan untuk mewarnai sebuah titik pada permukaan

pemapar. Selanjutnya proses scan di CRT. Frame buffer adalah matriks 2

dimensi yang mewakili piksel pada pemapar. Ukuran matriks harus cukup

untuk menyimpan kedalam warna pemapar untuk semua piksel. Sebagai

contoh pemapar (monitor) berresolusi 1280 x 1024 mempunya kedalaman

warna 24 bit (~16 juta warna) membutuhkan ruang simpan sekitar 4 Mb.

- Piksel dan Bitmap. Jumlah bit yang digunakan untuk mewakili

warna/bayangan dari masing-masing piksel (picture element = pixel). 4

bit/piksel = 24 = 16 level abu-abu.

BAB III

IMPLEMENTASI

3.1 Kegiatan Praktikum

PROGRAM PRIMITIS DRAWING

Program Primitis Drawing

#include <windows.h>

#ifdef __APPLE__

#include <GLUT/glut.h>

#else

#include <GL/glut.h>

#endif

#include <stdlib.h>

void display()

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.0,1.0,0.0);

glBegin(GL_POLYGON);

glVertex2f(-5.0, 5.0);

glColor3f(0.0,0.0,0.0);

glVertex2f(-5.0, -5.0);

glColor3f(1.0,1.0,1.0);

glVertex2f(5.0, -5.0);

glColor3f(0.0,0.0,0.0);

glVertex2f(5.0, 5.0);

glColor3f(1.0,1.0,1.0);

glVertex2f(0.10, 10.0);

glEnd();

glColor3f(0.0,1.0,0.0);

glBegin(GL_TRIANGLES);

glVertex2f(0.0, -10.0);

glVertex2f(-5.0, -5.0);

glVertex2f(5.0, -5.0);

glEnd();

glFlush();

}

void myinit()

{

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(-10.0,10.0,10.0,-10.0); // untuk

ukuran coordinat x, y

glMatrixMode(GL_MODELVIEW);

glClearColor(1.0,0.0,0.0,1.0);

/* menentukan intensitas warna RGB = terakhir

glColor3f(0.0,0.0,1.0);

}

int main(int argc, char* argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize(300,300); // ukuran

besarnya resolusi

glutInitWindowPosition(100,100); // untuk

posisi windows

glutCreateWindow("Segitiga Warna");

glutDisplayFunc(display);

myinit();

glutMainLoop();

return 0;

}

#include <windows.h>

#include <GL/gl.h>

#include <GL/glut.h>

void display(void)

{

/* bersihkan layar dari titik pixel yang masih

ada */

glClear (GL_COLOR_BUFFER_BIT);

/* gambar poligon (rectangle) dengan titik sudut *

* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) */

glColor3f (1.0, 1.0, 0.0);

glBegin(GL_POINTS);

glVertex3f (0.0, 0.0, 0.0);

glVertex3f (0.0, 0.8, 0.0);

glVertex3f (0.8, 0.0, 0.0);

glVertex3f (0.0, -0.8, 0.0);

glVertex3f (-0.8, 0.0, 0.0);

glEnd();

glFlush ();

}

void kunci(unsigned char key, int x, int y)

{

switch (key)

{

case 27 :

case 'q':

exit(0);

break;

}

glutPostRedisplay();

}

int main(int argc, char *argv[])

{

glutInitWindowSize(200,200);

glutInitWindowPosition(100,100);

glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

glutCreateWindow("Suprapto");

glutDisplayFunc(display);

glutKeyboardFunc(kunci);

glutMainLoop();

return 0;

}

1. Gantilah sintak program yang berwarna merah bold untuk membuat

berbagai macam primitive drawing seperti sintak dibawah ini. Lakukan

pengamatan apa yang terjadi ? dan bagaimana hasilnya?

glBegin(GL_POINTS);

glBegin(GL_LINE_STRIP);

glBegin(GL_LINE_LOOP);

glBegin(GL_LINES);

glBegin(GL_TRIANGLES);

glBegin(GL_TRIANGLE_FAN);

glBegin(GL_TRIANGLE_STRIP);

glBegin(GL_QUADS);

glBegin(GL_QUAD_STRIP);

glBegin(GL_POLYGON);

2. Lakukan penyisipan glColor3f (X, X, X); pada tiap vertek, kemudian

amati lagi apa yang terjadi?

3. Lakukan pengaturan ketebalan titik dan garis dengan perintah

glPointSize(x); dan glLineWidth(x); kemudian amati apa yang terjadi?

glPointSize(20) glLineWidht(20)

3.2 TUGAS

1. glBEGIN (GL_LINE_LOOP)

#include <windows.h>

#include <GL/gl.h>

#include <GL/glut.h>

void display(void){

/* bersihkan layar dari titik pixel yang masih ada */

glClear (GL_COLOR_BUFFER_BIT);

/*gambar poligon (rectangle) dengan titik sudut *

* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) */

glColor3f (1.0, 1.0, 1.0);

glBegin(GL_LINE_LOOP);

glVertex3f (0.0, 0.0, 0.0);

glVertex3f (0.0, 0.8, 0.0);

glVertex3f (0.8, 0.0, 0.0);

glVertex3f (0.0, -0.8, 0.0);

glVertex3f (-0.8, 0.0, 0.0);

glEnd();

glFlush ();

}

void kunci(unsigned char key, int x, int y)

{

switch (key)

{

case 27 :

case 'q':

exit(0);

break;

}

glutPostRedisplay();

}

int main(int argc, char *argv[]){

glutInitWindowSize(300,300);

glutInitWindowPosition(200,200);

glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

glutCreateWindow("Suprapto");

glutDisplayFunc(display);

glutKeyboardFunc(kunci);

glutMainLoop();

return 0;

}

2. glBEGIN (GL_POINTS)

void display(void){

/* bersihkan layar dari titik pixel yang masih ada */

glClear (GL_COLOR_BUFFER_BIT);

/*gambar poligon (rectangle) dengan titik sudut *

* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) */

glColor3f (1.0, 1.0, 1.0);

glBegin(GL_POINTS);

glVertex3f (0.0, 0.0, 0.0);

glVertex3f (0.0, 0.8, 0.0);

glVertex3f (0.8, 0.0, 0.0);

glVertex3f (0.0, -0.8, 0.0);

glVertex3f (-0.8, 0.0, 0.0);

glEnd();

glFlush ();

}

3. glBegin(GL_LINE_STRIP);

void display(void){

/* bersihkan layar dari titik pixel yang masih ada */

glClear (GL_LINE_STRIP);

/*gambar poligon (rectangle) dengan titik sudut *

* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) */

glColor3f (0.0, 1.0, 0.0);

glBegin(GL_POINTS);

glVertex3f (0.0, 0.0, 0.0);

glVertex3f (0.0, 0.8, 0.0);

glVertex3f (0.8, 0.0, 0.0);

glVertex3f (0.0, -0.8, 0.0);

glVertex3f (-0.8, 0.0, 0.0);

glEnd();

glFlush ();

}

4. glBegin(GL_LINES);

void display(void){

/* bersihkan layar dari titik pixel yang masih ada */

glClear (GL_LINES);

/*gambar poligon (rectangle) dengan titik sudut *

* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) */

glColor3f (1.0, 1.0, 0.1);

glBegin(GL_POINTS);

glVertex3f (8.0, 0.0, 0.0);

glVertex3f (0.0, 0.8, 0.0);

glVertex3f (0.8, 0.0, 0.0);

glVertex3f (0.0, -0.8, 0.0);

glVertex3f (-0.8, 0.0, .0);

glEnd();

glFlush ();

}

5. glBegin(GL_TRIANGLES);

#include <windows.h>

#include <GL/gl.h>

#include <GL/glut.h>

void display(void)

{

/* bersihkan layar dari titik pixel yang

masih ada */

glClear (GL_COLOR_BUFFER_BIT);

/* gambar poligon (rectangle) dengan titik sudut

*

* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) */

glBegin(GL_POLYGON);

glColor3f(0.1, 0.0, 0.1);

glVertex3f (-0.8, 0.0, 0.0);

glColor3f(0.0, 0.0, 1.0);

glVertex3f (0.0, 0.8, 0.0);

glColor3f(1.0, 1.1, 0.0);

glVertex3f (0.8, 0.0, 0.0);

glVertex3f (0.0, -0.8, 0.0);

glColor3f(0.0, 0.1, .0);

glVertex3f (-0.8, 0.0, 0.0);

glColor3f(1.0, 1.0, 0.0);

glEnd();

glColor3f(0.0, 1.0, 0.0);

glBegin(GL_TRIANGLES);

glVertex3f(0.0, 0.0, -0.8);

glVertex3f (0.0, -8.0, 0.0);

glVertex3f(0.0, 0.0, 0.8);

glEnd();

glFlush ();

}

void kunci(unsigned char key, int x, int y)

{

switch (key)

{

case 27 :

case 'q':

exit(0);

break;

}

glutPostRedisplay();

}

int main(int argc, char *argv[])

{

glutInitWindowSize(200,200);

glutInitWindowPosition(100,100);

glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

glutCreateWindow("Suprapto");

glutDisplayFunc(display);

glutKeyboardFunc(kunci);

glutMainLoop();

return 0;

}

- Segita tiga sama kaki

void display(void)

{

/* bersihkan layar dari titik pixel yang

masih ada */

glClear (GL_COLOR_BUFFER_BIT);

/* gambar poligon (rectangle) dengan titik

sudut *

* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) */

glBegin(GL_POLYGON);

glColor3f(0.1, 0.0, 0.0);

glVertex3f (-0.5, 0.0, 0.0);

glColor3f(0.0, 1.0, 1.0);

glVertex3f (0.0, 0.5, 0.0);

glColor3f(1.0, 0.1, 0.1);

glVertex3f (0.5, 0.0, 0.0);

glEnd();

glFlush ();

}

- Gambar Kubus

#include <windows.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <stdarg.h>

#include <gl/glut.h>

void initializer_list (void){

glClearColor(0.0, 1.0, 0.0, 1.0);

glShadeModel(GL_FLAT);}

void display (void){

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.0, 0.0, 0.0);

glLoadIdentity();

gluLookAt(0.5, 2.0, 5.0, 0.0, 0.0, 0.0, 0.0,

1.0, 0.0);

glScalef(2.0, 2.0, 2.0);

glutWireCube(1.0);

glFlush();

}

void reshape (int w, int h){

glViewport(0,0,(GLsizei)w, (GLsizei)h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glFrustum(-1.0, 1.0, -1.0, 1.0, 2.0, 20.0);

glMatrixMode(GL_MODELVIEW);

}

int main (int argc, char**argv){

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize (500,500);

glutCreateWindow(argv[0]);

initializer_list ();

glutDisplayFunc (display);

glutReshapeFunc (reshape);

glutMainLoop();

return 0;}

- Buat Warna Pelangi yang terdiri dari 7 warna

glBegin(GL_POLYGON);

glColor3f (1.0, 0.0, 0.0);

glVertex3f (-1.0, -1.0, 0.0);

glVertex3f (-1.0, 1.0, 0.0);

glColor3f (1.0, 0.5, 0.0);

glVertex3f (-0.75, 1.0, 0.0);

glVertex3f (-0.75, -1.0, 0.0);

glEnd();

glBegin(GL_POLYGON);

glColor3f (1.0, 0.5, 0.0);

glVertex3f (-0.75, -1.0, 0.0);

glVertex3f (-0.75, 1.0, 0.0);

glColor3f (1.0, 1.0, 0.0);

glVertex3f (-0.5, 1.0, 0.0);

glVertex3f (-0.5, -1.0, 0.0);

glEnd();

glBegin(GL_POLYGON);

glColor3f (1.0, 1.0, 0.0);

glVertex3f (-0.5, -1.0, 0.0);

glVertex3f (-0.5, 1.0, 0.0);

glColor3f (0.0, 1.0, 0.0);

glVertex3f (-0.25, 1.0, 0.0);

glVertex3f (-0.25, -1.0, 0.0);

glEnd();

glBegin(GL_POLYGON);

glColor3f (0.0, 1.0, 0.0);

glVertex3f (-0.25, -1.0, 0.0);

glVertex3f (-0.25, 1.0, 0.0);

glColor3f (0.0, 0.0, 1.0);

glVertex3f (0.25, 1.0, 0.0);

glVertex3f (0.25, -1.0, 0.0);

glEnd();

glBegin(GL_POLYGON);

glColor3f (0.0, 0.0, 1.0);

glVertex3f (0.25, -1.0, 0.0);

glVertex3f (0.25, 1.0, 0.0);

glColor3f (1.0, 0.0, 0.5);

glVertex3f (0.5, 1.0, 0.0);

glVertex3f (0.5, -1.0, 0.0);

glEnd();

glBegin(GL_POLYGON);

glColor3f (1.0, 0.0, 0.5);

glVertex3f (0.5, -1.0, 0.0);

glVertex3f (0.5, 1.0, 0.0);

glColor3f (1.0, 0.0, 1.0);

glVertex3f (0.75, 1.0, 0.0);

glVertex3f (0.75, -1.0, 0.0);

glEnd();

glBegin(GL_POLYGON);

glColor3f (1.0, 0.0, 1.0);

glVertex3f (0.75, -1.0, 0.0);

glVertex3f (0.75, 1.0, 0.0);

glVertex3f (1.0, 1.0, 0.0);

glVertex3f (1.0, -1.0, 0.0);

glEnd();

glFlush ();

- Buatlah Gambar segi empat dengan didalamnya diblok warna merah

#include <windows.h>

#ifdef __APPLE__

#include <GLUT/glut.h>

#else

#include <GL/glut.h>

#endif

#include <stdlib.h>

void display()

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0,0.0,0.0);

glBegin(GL_POLYGON);

glVertex2f(-5.0, 5.0);

glColor3f(0.0,0.0,0.0);

glVertex2f(-5.0, -5.0);

glColor3f(1.0,0.0,0.0);

glVertex2f(5.0, -5.0);

glColor3f(0.0,0.0,0.0);

glVertex2f(5.0, 5.0);

glEnd();

glFlush();

}

void myinit()

{

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(-10.0,10.0,10.0,-10.0); // untuk

ukuran coordinat x, y

glMatrixMode(GL_MODELVIEW);

glClearColor(0.0,1.0,0.0,0.0); // menentukan

intesitas warna RGB = terakhir

glColor3f(0.0,0.0,1.0);

}

int main(int argc, char* argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize(300,300); // ukuran

besarnya resolusi

glutInitWindowPosition(100,100); // untuk

posisi windows

glutCreateWindow("Segitiga Warna");

glutDisplayFunc(display);

myinit();

glutMainLoop();

return 0;

}

BAB IV

PENUTUP

4.1 Kesimpulan

Salah satu aplikasi atau software yang digunakan untuk membuat grafik,

animasi ataupun game serta program sederhana lainnya. Gambar yang terdapat di

dalam openGL meliputi polygon, segiti tiga, persegi dsb. Selain itu juga openGL

merupakan perangkat lunak yang memiliki objek-objek tertentu yang disibut

dengan primitive drawing.

Dalam mengoprasikan atau menjalankan OpenGL ini selalu dimulai dengan

glBegin(); dalam menggambar baik okjek, titik, atau garis selalu disertai dengan

glBegin() gambar yang ingin kita gambar di masukkan di dalam kurung

setelahnya misalnya, glbegin (GL_LINES); perintah dalam kurung yang akan

membuat garis vertical maupun horizontal sesuai dengan selera kita. Titik koma

dibelakang kurang yaitu sebagai pembatas dari setiap pengcodingan dalam

openGL namun tidak semua dari coding tersebut harus ada titik komanya, seperti

glEnd () }, ditandai dengan kurung kurawal yang berfungsi untuk membatasi

keseluruhan program yang kita butuhkan.

Setelah kita melakukan intruksi untuk membuat sesuatu yang berada dalam

imajinasi kita. Maka yang dibutuhkan pula yaitu glVertex, Verrtex ini yang akan

mengawali pekerjaan kita dan akan menjadi suatu acuan penting ketika dalam

pembuatan objek yang berupa titik. Misalnya, glVertex (0.0, 2.0, 0.0, 0.0);

maksudnya titik atau garis coordinat x atau y untuk memulai titik dalam

menggambar sebuah objek.

Setelah kita memula dengan glBegin(), tentu membutuhkan pula untuk

mengakhiri sebuah pekerjaan, glEnd () yang menjadi penutup dari pekerjaan kita

pada perangkat lunak OpenGL.

4.2 Saran

Asisten tidak cukup samapai disini untuk mentransformasikan ilmu yang

dimiliki, namun bagaimana nantinya kami bisa di luar praktikum untuk belajar

lebih baik.