Anda di halaman 1dari 23

PRAKTIKUM GRAFIKA KOMPUTER

Pertemuan ke-3 (Kurva)

Dadan Ahmad Badar Muttaqin


2006116

JURUSAN ILMU KOMPUTER


PROGRAM STUDI TEKNIK INFORMATIKA
INSTITUT TEKNOLOGI GARUT
Jl. Mayor Syamsu No. 1 Jayaraga Garut 44151 Indonesia

1
I. PENDAHULUAN

Kurva adalah entitas matematis yang menggambarkan lintasan atau jalur pergerakan. Dalam
konteks matematika dan grafika komputer, kurva biasanya terdiri dari serangkaian titik yang
terhubung secara berurutan, membentuk jalur yang kontinu. Kurva digunakan untuk menggambarkan
berbagai objek geometris, seperti garis, bentuk, dan lintasan, serta digunakan dalam berbagai aplikasi
seperti desain grafis, animasi, permodelan 3D, dan banyak lagi. Kurva adalah komponen dasar dalam
dunia grafika komputer yang membantu menciptakan elemen visual yang kompleks dan menarik.
Mereka memiliki aplikasi yang sangat luas dan merupakan inti dari banyak proses desain dan animasi
yang kita lihat sehari-hari di dunia digital.

Kurva dapat digunakan untuk menggambarkan berbagai jenis bentuk, mulai dari yang
sederhana seperti garis lurus hingga yang lebih kompleks seperti kurva Bézier atau spline. Kurva
sering didefinisikan oleh parameter matematis atau serangkaian titik kontrol yang memengaruhi
bentuk dan lintasan kurva tersebut.

Dalam grafika komputer, pemahaman tentang kurva dan cara mereka digunakan sangat
penting, karena mereka merupakan salah satu elemen dasar yang digunakan untuk membuat gambar,
animasi, dan tampilan visual lainnya. Kurva membantu menciptakan elemen-elemen visual yang
lebih halus dan realistis, serta memungkinkan perancang dan pengembang untuk menggambarkan
bentuk yang beragam dan kompleks.

1
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

II. PEMBAHASAN

A. Source Code
1. Kurva Polynomial derajat 1
GL_LINES
#include <windows.h>
#include <gl/glut.h>

void display(void)
{
/* bersihkan layar */
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);

float t = 0.0;
glBegin(GL_LINES);
for(t = -1.0; t<=1.0; t+=0.01){
/* x(t) = -1 + 2t; y(t) = 0 */
glVertex3f (t, -0.5+t*t, 0.0);
}
glEnd();
glFlush ();
}

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


{
switch (key)
{
/* aplikasi berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);

2
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

break;
}
glutPostRedisplay();
}

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


{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("2006116 - Dadan Ahmad Badar Muttaqin");
glutDisplayFunc(display);
glutKeyboardFunc(kunci);
glutMainLoop();
return 0;

}
GL_LINE_STRIP
#include <windows.h>
#include <gl/glut.h>

void display(void)
{
/* bersihkan layar */
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);

float t = 0.0;
glBegin(GL_LINE_STRIP);
for(t = -1.0; t<=1.0; t+=0.01){
/* x(t) = -1 + 2t; y(t) = 0 */
glVertex3f (t, -0.5+t*t, 0.0);

3
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

}
glEnd();
glFlush ();
}

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


{
switch (key)
{
/* aplikasi berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}

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


{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("2006116 - Dadan Ahmad Badar Muttaqin");
glutDisplayFunc(display);
glutKeyboardFunc(kunci);
glutMainLoop();
return 0;

}
GL_LINES_LOOP
#include <windows.h>

4
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

#include <gl/glut.h>

void display(void)
{
/* bersihkan layar */
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);

float t = 0.0;
glBegin(GL_LINE_LOOP);
for(t = -1.0; t<=1.0; t+=0.01){
/* x(t) = -1 + 2t; y(t) = 0 */
glVertex3f (t, -0.5+t*t, 0.0);
}
glEnd();
glFlush ();
}

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


{
switch (key)
{
/* aplikasi berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}

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


{

5
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("2006116 - Dadan Ahmad Badar Muttaqin");
glutDisplayFunc(display);
glutKeyboardFunc(kunci);
glutMainLoop();
return 0;

2. Kurva Polynomial derajat 2


GL_LINES
#include <windows.h>
#include <gl/glut.h>

void myinit()
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-10.0, 10.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
}

void display(void)
{
/* bersihkan layar */
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 0.0);

6
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

float t = 0.0;
//f(x) = 1/14 (x+4)(x+1)(x-1)(x-3) + 0.5
glBegin(GL_LINES);
for(t = -10.0; t<=10.0; t+=0.1){
glVertex3f (t, (t+4)*(t+1)*(t-1)*(t-3)/14 + 0.5, 0.0);
}
glEnd();
glBegin(GL_LINES);
glVertex3f(-10.0,0.0,0.0);
glVertex3f(10.0,0.0,0.0);
glVertex3f(0.0,-10.0,0.0);
glVertex3f(0.0,10.0,0.0);
glEnd();
glFlush ();
}

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


{
switch (key)
{
/* aplikasi berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}

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


{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

7
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("2006116 - Dadan Ahmad Badar Muttaqin");
glutDisplayFunc(display);
myinit();
glutMainLoop();
return 0;
}
GL_LINE_STRIP
#include <windows.h>
#include <gl/glut.h>

void myinit()
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-10.0, 10.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
}

void display(void)
{
/* bersihkan layar */
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 0.0);

float t = 0.0;
//f(x) = 1/14 (x+4)(x+1)(x-1)(x-3) + 0.5
glBegin(GL_LINE_STRIP);
for(t = -10.0; t<=10.0; t+=0.1){
glVertex3f (t, (t+4)*(t+1)*(t-1)*(t-3)/14 + 0.5, 0.0);

8
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

}
glEnd();
glBegin(GL_LINES);
glVertex3f(-10.0,0.0,0.0);
glVertex3f(10.0,0.0,0.0);
glVertex3f(0.0,-10.0,0.0);
glVertex3f(0.0,10.0,0.0);
glEnd();
glFlush ();
}

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


{
switch (key)
{
/* aplikasi berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}

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


{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("2006116 - Dadan Ahmad Badar Muttaqin");
glutDisplayFunc(display);
myinit();

9
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

glutMainLoop();
return 0;
}
GL_LINE_LOOP
#include <windows.h>
#include <gl/glut.h>

void myinit()
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-10.0, 10.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
}

void display(void)
{
/* bersihkan layar */
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 0.0);

float t = 0.0;
//f(x) = 1/14 (x+4)(x+1)(x-1)(x-3) + 0.5
glBegin(GL_LINE_LOOP);
for(t = -10.0; t<=10.0; t+=0.1){
glVertex3f (t, (t+4)*(t+1)*(t-1)*(t-3)/14 + 0.5, 0.0);
}
glEnd();
glBegin(GL_LINES);
glVertex3f(-10.0,0.0,0.0);
glVertex3f(10.0,0.0,0.0);

10
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

glVertex3f(0.0,-10.0,0.0);
glVertex3f(0.0,10.0,0.0);
glEnd();
glFlush ();
}

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


{
switch (key)
{
/* aplikasi berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}

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


{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("2006116 - Dadan Ahmad Badar Muttaqin");
glutDisplayFunc(display);
myinit();
glutMainLoop();
return 0;
}

11
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

3. Kurva Trigonometri

GL_LINES
#include <windows.h>
#include <gl/glut.h>

//Supaya bisa menggunakan fungsi sin(), program perlu include Math.h


#include <Math.h>

void myinit()
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.0, 10.0, -2.0, 2.0);
glMatrixMode(GL_MODELVIEW);
}

void display(void)
{
/* bersihkan layar */
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 0.0);

float x = 0.0;
glBegin(GL_LINES);
//perhitungan sudut di openGL menggunakan radian, bukan derajat
for(x=0.0; x<=6.28; x+=0.1)
{
glVertex2f(x,sin(x));
}
glEnd();

12
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

glBegin(GL_LINES);
glVertex3f(-10.0,0.0,0.0);
glVertex3f(10.0,0.0,0.0);
glVertex3f(0.0,-10.0,0.0);
glVertex3f(0.0,10.0,0.0);
glEnd();
glFlush ();
}

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


{
switch (key)
{
/* aplikasi berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}

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


{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("2006116 - Dadan Ahmad Badar Muttaqin");
glutDisplayFunc(display);
myinit();
glutMainLoop();
return 0;

13
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

}
GL_LINE_STRIP
#include <windows.h>
#include <gl/glut.h>

//Supaya bisa menggunakan fungsi sin(), program perlu include Math.h


#include <Math.h>

void myinit()
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.0, 10.0, -2.0, 2.0);
glMatrixMode(GL_MODELVIEW);
}

void display(void)
{
/* bersihkan layar */
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 0.0);

float x = 0.0;
glBegin(GL_LINE_STRIP);
//perhitungan sudut di openGL menggunakan radian, bukan derajat
for(x=0.0; x<=6.28; x+=0.1)
{
glVertex2f(x,sin(x));
}
glEnd();
glBegin(GL_LINES);

14
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

glVertex3f(-10.0,0.0,0.0);
glVertex3f(10.0,0.0,0.0);
glVertex3f(0.0,-10.0,0.0);
glVertex3f(0.0,10.0,0.0);
glEnd();
glFlush ();
}

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


{
switch (key)
{
/* aplikasi berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}

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


{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("2006116 - Dadan Ahmad Badar Muttaqin");
glutDisplayFunc(display);
myinit();
glutMainLoop();
return 0;
}

15
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

GL_LINE_LOOP
#include <windows.h>
#include <gl/glut.h>

//Supaya bisa menggunakan fungsi sin(), program perlu include Math.h


#include <Math.h>

void myinit()
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.0, 10.0, -2.0, 2.0);
glMatrixMode(GL_MODELVIEW);
}

void display(void)
{
/* bersihkan layar */
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 0.0);

float x = 0.0;
glBegin(GL_LINE_LOOP);
//perhitungan sudut di openGL menggunakan radian, bukan derajat
for(x=0.0; x<=6.28; x+=0.1)
{
glVertex2f(x,sin(x));
}
glEnd();
glBegin(GL_LINES);
glVertex3f(-10.0,0.0,0.0);

16
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

glVertex3f(10.0,0.0,0.0);
glVertex3f(0.0,-10.0,0.0);
glVertex3f(0.0,10.0,0.0);
glEnd();
glFlush ();
}

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


{
switch (key)
{
/* aplikasi berhenti ketika tombol q ditekan */
case 27 :
case 'q':
exit(0);
break;
}
glutPostRedisplay();
}

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


{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("2006116 - Dadan Ahmad Badar Muttaqin");
glutDisplayFunc(display);
myinit();
glutMainLoop();
return 0;
}

17
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

B. Output
1. Kurva Polynomial derajat 1
a) GL_LINES

b) GL_LINE_STRIP

c) GL_LINE_LOOP

18
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

2. Kurva Polynomial derajat 2


a) GL_LINES

b) GL_LINE_STRIP

c) GL_LINE_LOOP

19
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

3. Kurva Trigonometri
a) GL_LINES

b) GL_LINE_STRIP

c) GL_LINE_LOOP

20
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

C. Penjelasan

1. Kurva Polynominal Derajat 1


a) Kode ini digunakan untuk menggambar kurva polinomial derajat 1 (garis lurus).
b) Program ini menggunakan GLUT (OpenGL Utility Toolkit) untuk membuat jendela
dan menggambar kurva menggunakan OpenGL.
c) Fungsi display menggambar garis lurus dengan persamaan matematis sederhana x(t)
= -1 + 2t; y(t) = 0.
d) Fungsi kunci memungkinkan aplikasi untuk keluar saat tombol "q" atau tombol
Escape ditekan.
e) Program ini menggunakan inisialisasi jendela dan menjalankan pengulangan utama
GLUT.
2. Kurva Polynominal Derajat 2
a) Kode ini digunakan untuk menggambar kurva polinomial derajat 2.
b) Program ini juga menggunakan GLUT untuk membuat jendela dan menggambar
kurva.
c) Fungsi display menggambar kurva dengan persamaan polinomial derajat 2 yang
lebih kompleks (t+4)*(t+1)*(t-1)*(t-3)/14 + 0.5.
d) Fungsi myinit digunakan untuk mengatur parameter tampilan OpenGL seperti latar
belakang dan warna garis.
e) Program ini juga memiliki fungsi kunci yang memungkinkan keluar dari aplikasi saat
tombol "q" atau tombol Escape ditekan.
3. Kurva Trigonometri
a) Kode ini digunakan untuk menggambar kurva trigonometri, khususnya fungsi sinus
(sin(x)).
b) Seperti sebelumnya, program ini menggunakan GLUT untuk membuat jendela dan
menggambar kurva.
c) Fungsi display menggambar kurva sinus dengan menghitung nilai sin(x) untuk
berbagai nilai x dalam rentang 0 hingga 2π.
d) Fungsi myinit digunakan untuk mengatur parameter tampilan OpenGL.
e) Program ini juga memiliki fungsi kunci yang memungkinkan keluar dari aplikasi saat
tombol "q" atau tombol Escape ditekan.

21
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing

III. Kesimpulan

Dari kode yang telah dijelaskan diatas maka dapat diambil kesimpulan bahwa, jika
“GL_LINES” digunakan untuk menggambar garis-garis terpisah antara titik-titik yang
didefinisikan. Ini berarti setiap dua titik berturut-turut akan membentuk satu segmen garis. Cocok
digunakan untuk menggambar rangkaian garis yang terpisah, seperti menghubungkan beberapa titik
dengan garis lurus. “GL_LINE_STRIP” menghubungkan semua titik dalam urutan yang
didefinisikan, sehingga setiap titik selanjutnya terhubung dengan titik sebelumnya. Cocok
digunakan untuk menggambar kurva yang dihasilkan oleh rangkaian titik terkait, seperti
menggambar kurva Bezier dengan titik kendali berurutan. “GL_LINE_LOOP” mirip dengan
“GL_LINE_STRIP”, tetapi juga menghubungkan titik terakhir dengan titik pertama, membentuk
loop tertutup. Cocok digunakan untuk menggambar kurva yang harus membentuk poligon tertutup,
seperti menggambar bentuk geometri sederhana atau batas wilayah tertutup.
Pemilihan metode terbaik tergantung pada bagaimana kurva Anda dirancang dan bagaimana
Anda ingin menggambar kurva tersebut. Jadi, tidak ada metode yang sebaiknya dihindari dalam
menggambar kurva, karena pilihan tergantung pada kebutuhan spesifik Anda dalam menggambar
objek atau kurva tertentu.

22

Anda mungkin juga menyukai