Model Konseptual untuk Grafik Komputer
1. Application Model:
Database dari deskripsi dan sifat-sifat.
Database dari deskripsi dan sifat-sifat.
2. Application Program:
Sebuah kumpulan alur output berdasarkan geometri 2D atau 3D dari objek yang akan ditampilkan.
Sebuah kumpulan alur output berdasarkan geometri 2D atau 3D dari objek yang akan ditampilkan.
3. Graphics System:
Antarmuka bahasa tingkat tinggi kepada alat-alat grafis.
Antarmuka bahasa tingkat tinggi kepada alat-alat grafis.
Syarat – syarat sistem grafis:
a. Portability (dapat digunakan di alat, bahasa, dan komputer yang berbeda).
b. Programmer independence (dapat digunakan siapa saja).
Graphics Display Hardware
a. Arsitektur grafik raster dengan prosesor tampilan memotong penggunaan CPU.
b. Melakukan konversi scan line dan operasi-operasi raster.
c. CPU dan prosesor grafik berkomunikasi melalui sistem antrian memperbolehkan CPU untuk melakukan pekerjaan lain sedangkan prosesor grafik mengatur tampilan.
b. Melakukan konversi scan line dan operasi-operasi raster.
c. CPU dan prosesor grafik berkomunikasi melalui sistem antrian memperbolehkan CPU untuk melakukan pekerjaan lain sedangkan prosesor grafik mengatur tampilan.
Frame Buffer
Adalah sebuah array memori dimana komputer menyimpan sebuah image.
Sebuah true-color (24-bit or 32-bit) frame buffer menyimpan masing-masing 1 byte untuk merah, hijau, dan biru. Jadi tiap pixel dapat berisi 1 dari 224 warna.
Sebuah true-color (24-bit or 32-bit) frame buffer menyimpan masing-masing 1 byte untuk merah, hijau, dan biru. Jadi tiap pixel dapat berisi 1 dari 224 warna.
Sebuah indexed-color (8-bit or pseudo color) frame buffer menyimpan 1 byte per pixel. Byte ini menunjuk ke sebuah map warna atau tabel look up.
Video Controller Layout
Pembangkit scan raster diaktifkan setiap saat layer di-refresh. Pembangkit tersebut melakukan 2 hal:
a. Mengontrol register alamat-alamat X dan Y, memberikan koordinat x dan y ke pixel.
b. Membangkitkan pembelokan vertikal dan horizontal yang benar.
a. Mengontrol register alamat-alamat X dan Y, memberikan koordinat x dan y ke pixel.
b. Membangkitkan pembelokan vertikal dan horizontal yang benar.
Alat-alat Display:
1. CRT’s (Cathode Ray Tubes)
Sebuah CRT dapat melakukan sebuah random scan (vector display) atau sebuah raster scan (raster display):
1. Vector display
Elektron disorotkan secara langsung hanya ke bagian layar yang mengandung gambar.
2. Raster display
1. Vector display
Elektron disorotkan secara langsung hanya ke bagian layar yang mengandung gambar.
2. Raster display
Electron beam men-scan seluruh layar.
Frame harus di-refresh untuk menggambarkan image baru: raster, pixel, scanline, dan rasterize.
Warna CRT’s lebih rumit/sulit. Menggunakan pola warna phospors di layer :
Frame harus di-refresh untuk menggambarkan image baru: raster, pixel, scanline, dan rasterize.
Warna CRT’s lebih rumit/sulit. Menggunakan pola warna phospors di layer :
Delta electron gun arrangement
In-line electron gun arrangement
2. Raster CRT’s
Kelebihan:
a. Memperbolehkan solids, tidak hanya wireframes
b. Mempengaruhi teknologi low-cost CRT’s
c. Terang!
Kekurangan:
a. Memerlukan array memori screen-size
b. Discreet sampling (pixels)
c. Practical limit pada ukuran (40 inches)
d. Besar sekali
e. Rewel
Kelebihan:
a. Memperbolehkan solids, tidak hanya wireframes
b. Mempengaruhi teknologi low-cost CRT’s
c. Terang!
Kekurangan:
a. Memerlukan array memori screen-size
b. Discreet sampling (pixels)
c. Practical limit pada ukuran (40 inches)
d. Besar sekali
e. Rewel
3. LCD’s (Liquid Crystal Displays)
LCD’s : molekul-molekul organic, secara alami dalam status crystalline yang mencair ketika terkena panas. Ada 2: transmissive dan reflective LCDs.
4. Plasma
Keuntungan Plasma:
a. Angle penglihatan yang luas.
b. Baik untuk format tampilan yang besar.
c. Terang.
a. Angle penglihatan yang luas.
b. Baik untuk format tampilan yang besar.
c. Terang.
Kekurangan Plasma:
a. Mahal
b. Pixel besar (1mm)
c. Tidak seterang CRT’s
d. Menggunakan lebih banyak tenaga
a. Mahal
b. Pixel besar (1mm)
c. Tidak seterang CRT’s
d. Menggunakan lebih banyak tenaga
Physical Input Devices:
1. Trackball dan Joystick
2. Mouse
3. Keyboard
4. Light Pen
5. Touch Screen
6. Graphics Tablet
7. Image Digitizer
8. dan lain-lain.
1. Trackball dan Joystick
2. Mouse
3. Keyboard
4. Light Pen
5. Touch Screen
6. Graphics Tablet
7. Image Digitizer
8. dan lain-lain.
Logical Input Devices:
1. Locator (memberi informasi koordinat 2D dan 3D)
2. Button (digunakan untuk menseleksi atau mengaktifkan event)
3. Keyboard (secara konseptual dan fungsional dipertimbangkan sebagai kumpulan button)
4. Valuator (menyediakan nilai tunggal, umumnya bilangan riil)
5. Pick (menseleksi/memilih objek)
1. Locator (memberi informasi koordinat 2D dan 3D)
2. Button (digunakan untuk menseleksi atau mengaktifkan event)
3. Keyboard (secara konseptual dan fungsional dipertimbangkan sebagai kumpulan button)
4. Valuator (menyediakan nilai tunggal, umumnya bilangan riil)
5. Pick (menseleksi/memilih objek)
OpenGL mempunyai 2 fungsi utama:
1. rendering: mengkonversi deskripsi objek geometris/matematis menjadi image (proses sintesis).
2. perubahan keadaan: fungsi-fungsi transformasi dan atribut.
1. rendering: mengkonversi deskripsi objek geometris/matematis menjadi image (proses sintesis).
2. perubahan keadaan: fungsi-fungsi transformasi dan atribut.
Program OpenGL berlaku sama pada alat-alat dan sitem operasi yang berbeda. OpenGL berbasiskan Event-driven.
Event-Driven
Program hanya merespon kepada event (kejadian), program tidak melakukan apa-apa sampai event muncul. Contoh event: meng-klik mouse dan window resize. Programmer harus mendefinisikan event dan aksi-aksi (tindakan) yang akan diambil. Sistem mengatur antrian event dan mengambil aksi-aksi yang didefinisikan programmer.
Program event-driven: dimulai dari main(), kemudian di-inisialisasi, dan menunggu di infinite loop. Programmer meregister fungsi-fungsi callback dan fungsi-fungsi tersebut dipanggil ketika event muncul.
OpenGL:
- Dapat digunakan diberbagai sistem window yang berbeda.
- Perhatian hanya pada penggambaran.
- Tidak ada fungsi manajemen window.
- Dapat digunakan dimana-mana.
- Dapat digunakan diberbagai sistem window yang berbeda.
- Perhatian hanya pada penggambaran.
- Tidak ada fungsi manajemen window.
- Dapat digunakan dimana-mana.
Kebanyakan konstanta didefinisikan pada include files: gl.h, glu.h, dan glut.h.
Kebanyakan aplikasi-aplikasi OpenGL menggunakan standard C library : #include dan #include
Kebanyakan aplikasi-aplikasi OpenGL menggunakan standard C library : #include dan #include
Struktur Program
1. Mengkonfigurasi dan membuka window (GLUT)
2. Menginisialisasi state OpenGL
3. Meregistrasi fungsi callback input : render, resize, input
4. Inisialisasi sendiri. Contoh: men-set warna background
5. glutMainLoop(). Menunggu di sini sampai aksi dipilih
2. Menginisialisasi state OpenGL
3. Meregistrasi fungsi callback input : render, resize, input
4. Inisialisasi sendiri. Contoh: men-set warna background
5. glutMainLoop(). Menunggu di sini sampai aksi dipilih
GLUT untuk membuka window
- glutInit (&argc, argv);
Inisialisasi
- glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
Menge-set mode tampilan (contoh: buffer tunggal dengan RGB)
- glutInitWindowSize (800, 600);
Mengeset ukuran window (W x H)
- glutInitPosition (100, 150);
Menge-set ujung kiri atas window
- glutCreateWindow(“My First Window”);
Membuka window dengan judul “My First Window”
Inisialisasi
- glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
Menge-set mode tampilan (contoh: buffer tunggal dengan RGB)
- glutInitWindowSize (800, 600);
Mengeset ukuran window (W x H)
- glutInitPosition (100, 150);
Menge-set ujung kiri atas window
- glutCreateWindow(“My First Window”);
Membuka window dengan judul “My First Window”
Contoh program:
void main (int argc, char** argv){
/*pertama-tama menginisialisasi toolkit, mengatur mode tampilan dan menciptakan window*/
void main (int argc, char** argv){
/*pertama-tama menginisialisasi toolkit, mengatur mode tampilan dan menciptakan window*/
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (800, 600);
glutInitPosition (100, 150);
glutCreateWindow(“My First Window”);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (800, 600);
glutInitPosition (100, 150);
glutCreateWindow(“My First Window”);
// lalu meregister fungsi-fungsi callback
// melakukan inisialisasi sendiri
// menunggu di glutMainLoop untuk events
// melakukan inisialisasi sendiri
// menunggu di glutMainLoop untuk events
Hasil:
GLUT callback functions:
– glutDisplayFunc (MyDisplay);
konten window perlu digambar ulang
– glutReshapeFunc (myReshape);
dipanggil ketika window di-reshaped
– glutMouseFunc (myMouse);
dipanggil ketika mouse ditekan
– glutKeyboardFunc (myKeyboard);
dipanggil ketika keyboard ditekan atau dilepaskan
konten window perlu digambar ulang
– glutReshapeFunc (myReshape);
dipanggil ketika window di-reshaped
– glutMouseFunc (myMouse);
dipanggil ketika mouse ditekan
– glutKeyboardFunc (myKeyboard);
dipanggil ketika keyboard ditekan atau dilepaskan
Basic Drawing Primitives
Primitives dispesifikasikan dengan menggunakan format :
glBegin (primType);
……… // mendefinisikan prinitives anda di sini
glEnd ()
Primitives dispesifikasikan dengan menggunakan format :
glBegin (primType);
……… // mendefinisikan prinitives anda di sini
glEnd ()
Contoh : menggambar 3 titik
glBegin (GL_POINTS);
glVertex2i (100, 50);
glVertex3fv (100, 130);
glVertex3fv (150, 130);
glEnd();
glVertex2i (100, 50);
glVertex3fv (100, 130);
glVertex3fv (150, 130);
glEnd();
Contoh gambar dan parameter glBegin() –nya:
Introduction to OpenGL and GLUT II
OpenGl Design Goals
• Design Goal SGI terhadap open GL:
– Graphics API yang mempunyai performa tinggi
– Beberapa tidak tergantung terhadap hardware
– Natural, API dibuat dapat di perluas lagi
• OpenGL menjadi standar karena
– Dia tidak mencoba untuk melakukan hal yang lebih banyak
• Hanya me-render image, tidak me-manage windows, dll.
• Tidak ada animasi tingkat tinggi, dll
– Adanya kekurangan
• Rendering effect yang hebat dan performa yang tinggi
– Dipromosikan oleh SGI (& Microsoft, half-heartedly), sekarang di dukung NVidia dan ATI.
– Tidak berubah setiap tahun
– Graphics API yang mempunyai performa tinggi
– Beberapa tidak tergantung terhadap hardware
– Natural, API dibuat dapat di perluas lagi
• OpenGL menjadi standar karena
– Dia tidak mencoba untuk melakukan hal yang lebih banyak
• Hanya me-render image, tidak me-manage windows, dll.
• Tidak ada animasi tingkat tinggi, dll
– Adanya kekurangan
• Rendering effect yang hebat dan performa yang tinggi
– Dipromosikan oleh SGI (& Microsoft, half-heartedly), sekarang di dukung NVidia dan ATI.
– Tidak berubah setiap tahun
OpenGL : Konversi
- fungsi di open GL dimulai dengan gl, kebanyakan hanya dengan gl ex. glColor()
- fungsi yang diawali dengan glut berasal dari GLUT library, dibuat di atas Open GL dan WGL (windows) atau X (Linux) untuk management window, mouse dan keyboard event, dll
- nama fungsi menunjukan nilai dan tipe argument.
- fungsi berakhiran dengan f bertipe float
- fungsi berakhiran dengan i bertipe int
- fungsi berakhiran dengan b bertipe bytes dsb
- fungsi yang diawali dengan glut berasal dari GLUT library, dibuat di atas Open GL dan WGL (windows) atau X (Linux) untuk management window, mouse dan keyboard event, dll
- nama fungsi menunjukan nilai dan tipe argument.
- fungsi berakhiran dengan f bertipe float
- fungsi berakhiran dengan i bertipe int
- fungsi berakhiran dengan b bertipe bytes dsb
-
OpenGL : Simple Use
Buka lembar kerja baru kemudian tambahkan OpenGL
Set parameter proyeksi
Set pencahayaan(Lightning)
Main rendering
- set posisi kamera dengan gluLookAt()
- merender poligon dari model
OpenGL: Pengeset-an parameter proyeksi
Biasanya kita menggunakan perspective projection
-object yang jauh tampak lebih kecil dibandingkan dengan yang dekat
-point menghilanya suatu object biasanya berada di tengah
-di definisikan oleh view frustum (draw it)
-proyeksi lain: orthographic, isometric
Biasanya kita menggunakan perspective projection
-object yang jauh tampak lebih kecil dibandingkan dengan yang dekat
-point menghilanya suatu object biasanya berada di tengah
-di definisikan oleh view frustum (draw it)
-proyeksi lain: orthographic, isometric
dalam OpenGL:
– proyeksi di implementasikan oleh projection matrix
– gluPerspective() menciptakan prespektif
– proyeksi di implementasikan oleh projection matrix
– gluPerspective() menciptakan prespektif
projection matrix:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(vfov, aspect, near, far);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(vfov, aspect, near, far);
Parameters dari gluPerspective():
– vfov: vertical field of view
– aspect: window width/height
– near, far: distance to near & far clipping planes
– vfov: vertical field of view
– aspect: window width/height
– near, far: distance to near & far clipping planes
OpenGL : Lighting
-opsi yang paling sederhana adalah mengganti warna sekarang atara polygon atau vertices ex glColor()
-atau OpenGL menyediakan model pencahayaan yang simple
Set parameter untuk pencahayaannya
Intensiti, posisi, arah & jatuhnya cahaya (jika mungkinset parameter material untuk menggambarkan cahaya memantul dari permukaan
-opsi yang paling sederhana adalah mengganti warna sekarang atara polygon atau vertices ex glColor()
-atau OpenGL menyediakan model pencahayaan yang simple
Set parameter untuk pencahayaannya
Intensiti, posisi, arah & jatuhnya cahaya (jika mungkinset parameter material untuk menggambarkan cahaya memantul dari permukaan
OpenGL : Specifying Color
Dapat menspesifikasikan property lain seperti warna
– untuk menghasilkan single aqua-colored triangle:
glColor3f(0.1, 0.5, 1.0);
glVertex3fv(v0);
glVertex3fv(v1);
glVertex3fv(v2);
glColor3f(0.1, 0.5, 1.0);
glVertex3fv(v0);
glVertex3fv(v1);
glVertex3fv(v2);
– untuk menghasilkan Gouraud-shaded triangle:
glColor3f(1, 0, 0); glVertex3fv(v0);
glColor3f(0, 1, 0); glVertex3fv(v1);
glColor3f(0, 0, 1); glVertex3fv(v2);
glColor3f(1, 0, 0); glVertex3fv(v0);
glColor3f(0, 1, 0); glVertex3fv(v1);
glColor3f(0, 0, 1); glVertex3fv(v2);
– dalam OpenGL, warna juga dapat mempunyai komponen ke 4 a (opacity)
• Generally want a = 1.0 (opaque);
• Generally want a = 1.0 (opaque);
OpenGL : Specifying Viewpoint
• glMatrixMode(GL_MODELVIEW);
• glLoadIdentity();
• gluLookAt(eyeX, eyeY, eyeZ,
lookX, lookY, lookZ,
upX, upY, upZ);
• glMatrixMode(GL_MODELVIEW);
• glLoadIdentity();
• gluLookAt(eyeX, eyeY, eyeZ,
lookX, lookY, lookZ,
upX, upY, upZ);
– eye[XYZ]: posisi kamera di koordinat dunia
– look[XYZ]: titik tengah pada view kamera
• up[XYZ]: vector yang menentukan tinggi rendah kamera
• menciptakan suatu matriks yang mengubah point di koordinat dunia menjadi koordinat kamera
– look[XYZ]: titik tengah pada view kamera
• up[XYZ]: vector yang menentukan tinggi rendah kamera
• menciptakan suatu matriks yang mengubah point di koordinat dunia menjadi koordinat kamera
– Camera at origin
– Looking down -Z axis
– Up vector aligned with Y axis (actually Y-Z plane)
–
OpenGL : Specifying Normals
• memangil glColor() mengeset warna semua vertices sampai glColor() dipanggil kembali
• memanggil glNormal() mengeset normal vector sampai glNormal() dipanggil kembali
jadi flat-shaded lighting membutuhkan:
glNormal3f(Nx, Ny, Nz);
glVertex3fv(v0);glVertex3fv(v1);glVertex3fv(v2);
sedangkan smooth shading membutuhkan:
glNormal3f(N0x, N0y, N0z); glVertex3fv(v0);
glNormal3f(N1x, N1y, N1z); glVertex3fv(v1);
glNormal3f(N2x, N2y, N2z); glVertex3fv(v2);
• (tentu saja, pencahayaan membutuhkan pensetingan tambahan…)
–
OpenGL : Specifying Normals
• memangil glColor() mengeset warna semua vertices sampai glColor() dipanggil kembali
• memanggil glNormal() mengeset normal vector sampai glNormal() dipanggil kembali
jadi flat-shaded lighting membutuhkan:
glNormal3f(Nx, Ny, Nz);
glVertex3fv(v0);glVertex3fv(v1);glVertex3fv(v2);
sedangkan smooth shading membutuhkan:
glNormal3f(N0x, N0y, N0z); glVertex3fv(v0);
glNormal3f(N1x, N1y, N1z); glVertex3fv(v1);
glNormal3f(N2x, N2y, N2z); glVertex3fv(v2);
• (tentu saja, pencahayaan membutuhkan pensetingan tambahan…)
OpenGL : Modeling Transformation
• OpenGL menyediakan beberapa perintah untuk melakukan perubahan model atau bentuk
– glTranslate{fd}(x, y, z)
• menciptakan matriks T yang mengubah object dengan menerjemahkan (mengerakan) nya berdasarkan nilai x y dan z
– glRotate{fd}(angle, x, y, z)
• menciptakan matriks R yang mengubah object dengan memutarnya counterclockwise angle degrees about the vector {x, y, z}
– glScale{fd}(x, y, z)
• menciptakan matriks S yang menskala object berdasarkan pada factor arah x, y, and z
• OpenGL menyediakan beberapa perintah untuk melakukan perubahan model atau bentuk
– glTranslate{fd}(x, y, z)
• menciptakan matriks T yang mengubah object dengan menerjemahkan (mengerakan) nya berdasarkan nilai x y dan z
– glRotate{fd}(angle, x, y, z)
• menciptakan matriks R yang mengubah object dengan memutarnya counterclockwise angle degrees about the vector {x, y, z}
– glScale{fd}(x, y, z)
• menciptakan matriks S yang menskala object berdasarkan pada factor arah x, y, and z
OpenGL : Matrix Manipulation
• Each of these postmultiplies the current matrix
– E.g., if current matrix is C, then C=CS
– The current matrix is either the modelview matrix or the projection matrix
– Set these with glMatrixMode(), e.g.:
glMatrixMode(GL_MODELVIEW);
glMatrixMode(GL_PROJECTION);
• Each of these postmultiplies the current matrix
– E.g., if current matrix is C, then C=CS
– The current matrix is either the modelview matrix or the projection matrix
– Set these with glMatrixMode(), e.g.:
glMatrixMode(GL_MODELVIEW);
glMatrixMode(GL_PROJECTION);
– Mengubah matriks sebelumnya dengan matriks identity:
glLoadIdentity()
– Postmultiply the current matrix with an arbitrary matrix:
glMultMatrix{fd}(float/double m[16])
– Copy matriks sekarang dan masukan ke dalam stack:
glPushMatrix()
– Buang matriks saat ini dan gantikan dengan apa saja yang ada di atas stack:
glPopMatrix()
– Note that there are matrix stacks for both modelview and projection modes
glLoadIdentity()
– Postmultiply the current matrix with an arbitrary matrix:
glMultMatrix{fd}(float/double m[16])
– Copy matriks sekarang dan masukan ke dalam stack:
glPushMatrix()
– Buang matriks saat ini dan gantikan dengan apa saja yang ada di atas stack:
glPopMatrix()
– Note that there are matrix stacks for both modelview and projection modes
– Untuk membersihkan layar:
glClearColor(r, g, b, a);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(r, g, b, a);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Tidak ada komentar:
Posting Komentar