Anda di halaman 1dari 17

COMPUTER

GRAPHICS
LECTURE NOTES

APRI SANDRICHA
(50419955)
INTRODUCTION TO GRAPHICS
• Raster Displays
• Basic Line Drawing
R A S T E R D I S P L AY S
Raster adalah jenis gambar digital yang paling umum, karena akrab di kehidupan sehari-hari, yaitu: foto digital.

Raster adalah jenis gambar digital yang merepresentasikan gambar sebagai susunan titik-titik atau matriks. Tiap titik disebut pixel sebagai
elemen terkecil yang menyusun gambar. Pada gambar hitam-putih, pixel hanya bisa berwarna hitam atau putih. Sedangkan pada gambar
berwarna, tiap-tiap pixel memiliki warna. Kira-kira seperti ini:
R A S T E R D I S P L AY S
Jadi file gambar disimpan sebagai data matriks. Makin besar gambarnya, makin besar grid matriksnya. Otomatis
•makin
  banyak data yang disimpan dan makin besar ukuran filenya. Jadi file gambar dengan ukuran 18 megapixel,
berukuran lebih besar dari file gambar berukuran 5 megapixel. Karena dimensinya berbeda.

Konvensi dalam catatan ini akan mengikuti OpenGL, menempatkan asal di kiri bawah sudut, dengan piksel itu
berada di lokasi (0, 0). Ketahuilah bahwa menempatkan asal di kiri atas adalah konvensi umum lainnya.
Salah satu dari intensitas atau warna dikaitkan dengan setiap piksel, di mana N adalah jumlah bit per piksel. Skala
abu-abu biasanya memiliki satu byte per piksel, untuk = 256 intensitas. Warna sering membutuhkan satu byte per
saluran, dengan tiga saluran warna per piksel: merah, hijau, dan biru.
R A S T E R D I S P L AY S
Data warna disimpan dalam buffer bingkai. Ini kadang-kadang disebut peta gambar atau bitmap.
Operasi primitif:
• setpixel(x, y, warna)
Mengatur piksel pada posisi (x, y) ke warna yang diberikan.
• getpixel(x, y)
Mendapat warna pada piksel pada posisi (x, y)

Konversi pindaian adalah proses mengubah objek dasar tingkat rendah menjadi objek yang sesuai representasi peta piksel. Ini sering
merupakan perkiraan ke objek, karena buffer bingkai adalah a kisi diskrit
B A S I C L I N E D R AW I N G
Atur warna piksel untuk mendekati tampilan garis dari (x0, y0) hingga (x1, y1). Harus
•• "lurus"
  dan melewati titik akhir.
• independen dari urutan titik.
• cerah seragam, tidak bergantung pada kemiringan.
Persamaan eksplisit untuk sebuah garis adalah y = mx + b
Diberikan dua titik (x0, y0) dan (x1, y1) yang terletak pada suatu garis, kita dapat menyelesaikan m dan b untuk
garis. Pertimbangkan y0 = mx0 + b dan y1 = mx1 + b.
Kurangi y0 dari y1 untuk menyelesaikan m = dan b = y0 mx0.
Dengan mensubstitusi nilai b, persamaan ini dapat ditulis sebagai y = m(x-x0) + y0.

Pertimbangkan algoritma menggambar garis sederhana ini:


int x
float m, y
m = (y1 - y0) / (x1 - x0)
for (x = x0; x <= x1; ++x) {
y = m * (x - x0) + y0
setpixel(x, round(y), linecolor)
}
B A S I C L I N E D R AW I N G
Masalah dengan algoritma ini:
• 
• Jika x1 < x0 tidak ada yang ditarik.

Solusi: Ganti urutan titik jika x1 < x0.

• Pertimbangkan kasus ketika m < 1 dan m > 1:

Jumlah piksel yang berbeda aktif, yang menyiratkan kecerahan yang berbeda di antara keduanya.

Solusi: Ketika m > 1, loop di atas y = y0 . . . y1 bukannya x, maka x =(y - y0) + x0.

• Tidak efisien karena banyaknya operasi dan penggunaan angka floating point.

Solusi: Algoritma yang lebih canggih, yang disebut Algoritma Gambar Garis Bresenham.
CURVES
• Parametric Curves
• Ellipses
• Polygons
• Rendering Curves in OpenGL
PA R A M E T R I C C U R V E S
kita telah melihat bentuk parametrik untuk sebuah garis:

perhatikan bahwa x, y dan z masing-masing diberikan oleh persamaan yang melibatkan:

• parameter t

• beberapa titik kontrol yang ditentukan pengguna, xo dan x1


PA R A M E T R I C C U R V E S
Ada beberapa cara untuk merepresentasikan kurva dalam dua dimensi:
• 
• Eksplisit: y = f(x), diberikan x, cari y
Contoh:
Bentuk eksplisit dari sebuah garis adalah y = mx + b. Ada masalah dengan ini representasi–bagaimana dengan garis vertical ?
• Implisit: f(x, y) = 0, atau dalam bentuk vektor, f(¯p) = 0
Contoh:
Persamaan implisit dari garis yang melalui p¯0 dan p¯1 adalah
(x-x0)(y1-y0) -(y-y0)(x1-x0) = 0.
Intuisi:
– Arah garis adalah vektor = p1-p¯0.
– Jadi sebuah vektor dari p¯0 ke sembarang titik pada garis harus sejajar dengan ~d.
– Secara ekivalen, setiap titik pada garis harus memiliki arah dari p¯0 tegak lurus ~d = (dy, dx) ~n.
Ini dapat diperiksa dengan ~d · ~d= (dx, dy) · (dy, dx) = 0.
– Jadi untuk sembarang titik p¯ pada garis, (¯p p¯0) · ~n = 0. Disini ~n = (y1 y0, x0 x1). Ini disebut biasa.
– Akhirnya, (¯p p¯0) · ~n = (x x0, y y0) · (y1 y0, x0 x1) = 0. Jadi, garis juga dapat ditulis sebagai: (¯p p¯0) · ~n = 0
PA R A M E T R I C C U R V E S
• Parametrik: = f(λ) dimana f : R → ,dapat ditulis sebagai p¯(λ) atau (x(λ), y(λ)).
• 
Contoh:

Garis parametrik melalui p¯0 dan p¯1 adalah

λ) = p0 + ~d,

dimana ~d = p1 p¯0.

Perhatikan bahwa batas pada harus ditentukan:

– Segmen garis dari 0 ke p¯1: 01.

– Sinar dari p¯0 dalam arah p¯1: 0 .

– Garis yang melalui p¯0 dan p¯1: < <


ELLIPSES
• Implicit: + = 1. Ini hanya untuk kasus khusus di mana elips berpusat di titik asal dengan sumbu mayor dan minor sejajar dengan y = 0 and x =
•  0.

• • Parametrik: x(λ) = a cos(2πλ), y(λ) = b sin(2πλ), atau dalam bentuk vektor

Bentuk implisit dari elips dan lingkaran adalah umum karena tidak ada bentuk fungsional yang eksplisit.Karena y adalah perkalian dari x.
P O LY G O N S
Poligon adalah kurva planar tertutup yang kontinu, linier sepotong-sepotong.

• Sebuah poligon sederhana tidak berpotongan sendiri.

• Sebuah poligon beraturan adalah sederhana, sama sisi, dan sama sudut.

• Sebuah n-gon adalah poligon beraturan dengan n sisi.

• Sebuah poligon cembung jika, untuk dua titik yang dipilih di dalam poligon, ruas garisantara mereka benar-benar terkandung dalam poligon.
P O LY G O N S
Contoh:
• 
Untuk menemukan titik sudut dari n-gon, cari n titik yang berjarak sama pada lingkaran.

Dalam koordinat kutub, setiap simpul (, ) = (r cos(θi), r sin(θi)), di mana i = i untuk i = 0 . . . N-1

• Untuk menerjemahkan: Tambahkan (, ) ke setiap titik.

• Untuk skala: Ubah r.

• Untuk memutar: Tambahkan ke setiap


RENDERING CURVES IN OPENGL
OpenGL tidak secara langsung mendukung rendering kurva apa pun selain garis dan polyline. Namun,kita dapat mengambil sampel kurva
dan menggambarnya sebagai strip garis, missal :

float x, y;

glBegin(GL_LINE_STRIP);

for (int t=0 ; t <= 1 ; t += .01)

computeCurve( t, &x, &y);

glVertex2f(x, y);

glEnd();

kita dapat menyesuaikan ukuran langkah untuk menentukan berapa banyak segmen garis yang akan digambar. Menambahkan segmen garis

akan meningkatkan akurasi kurva, tetapi memperlambat rendering.


RENDERING CURVES IN OPENGL
GLU memang memiliki beberapa pustaka khusus untuk membantu menghasilkan dan merender kurva. Untuk

contoh, kode berikut membuat disk dengan lubang di tengahnya, berpusat di sekitar sumbu z.

GLUquadric q = gluNewQuadric();

gluDisk(q, innerRadius, outerRadius, sliceCount, 1);

gluDeleteQuadric(q);

Lihat Manual Referensi OpenGL untuk informasi lebih lanjut tentang rutinitas ini

Anda mungkin juga menyukai