Grafika Komputer part 7

RENDERING

Rendering (pengecatan) adalah sebuah cara dalam grafika computer untuk membuat pemandangan nampak ‘nyata’ atau visualisasi objek 3D menjadi riil. Untuk rendering objek 3D, ada beberapa factor yang mempengaruhi, diantaranya factor cahaya, sifat/karakteristik bahan, posisi kamera dan lain-lain. Suatu citra yang mengalami proses rendering yang baik akan menghasilkan gambar hasil akhir. Sedangkan tanpa rendering tidak akan menghasilkan gambar.

Proses rendering dapat dilakukan dengan beberapa cara, yaitu : lighting dan texturing.

LIGHTING

Lighting atau pencahayaan merupakan suatu metode yang dapat kita terapkan pada proses rendering untuk menjadikan sebuah objek menjadi terlihat berbeda. Untuk memperlihatkan bahwa lighting atau pencahayaan akan mempengaruhi pandangan terhadap sebuah objek.

Dalam proses rendering , lighting dipengaruhi oleh factor-faktor sebagai berikut :

1.jarak objek dengan sumber cahaya,

2.posisi objek,

3.bentuk permukaan objek.

Untuk memahami dasar-dasar lighting kita mulai dengan memperkenalkan model bayangan.

1.MODEL BAYANGAN

Sebuah objek akan memberikan sifat yang berbeda pada saat dikenai cahaya. Ada yang memantulkan, membiaskan ataupun menyerap cahaya. Selain itu, ada objek yang apabila dikenai cahaya maka akan menimbulkan bayangan. Terdapat dua cara pemberian bayangan pada proses rendering :

1)Bayangan rata (flat shading)

Pemberian bayangan rata (flat) merupakan cara termudah untuk dibuat. Bayangan rata mempunyai karakteristik sebagai berikut :

Pemberian tone yang sama untuk setiap polygon.

Penghitungan jumlah cahaya mulai dari titik tunggal pada permukaan.

Penggunaan satu normal untuk seluruh permukaan.

Pemberian bayangan rata ini mengasumsikan bahwa setiap muka polygon dari sebuah objek adalah rata dan semua titik pada permukaan mempunyai jarak yang sama dengan sumber cahaya.

2)Bayangan halus (smooth shading)

Cara ini mengijinkan kita untuk membuat perubahan setahap demi setahap dalam pemberian bayangan pada sebuahnpermukaan. Cara ini juga mengijinkan pemberian bayangan pada satu muka lebih pudar dibandingkan muka yang lain. Ini akan menghasilkan permukaan yang lebih halus.

Bayangan tinbul disebabkan oleh adanya sumber cahaya. Di sekitar kita banyak didapati pelbagai sumber cahaya, contohnya : cahaya matahari, neon, lampu pijar dan lain sebagainya. Jenis cahaya dari pelbagai sumber cahaya sering diasumsikan dan dimodelkan dengan cahaya titik dan cahaya lingkungan. Dengan dua jenis cahaya ini memudahkan pembuatan model bayangan dan pantulan.

Program

//——————————————————————-

#include // deklarasi library dari builder

#pragma hdrstop

#include “Unit1.h”

//——————————————————————-

#pragma package(smart_init)

#pragma resource “*.dfm”

TForm1 *Form1;

//——————————————————————-

__fastcall TForm1::TForm1(TComponent* Owner) // deklarasi form

: TForm(Owner)

{

}

//——————————————————————-

Graphics::TBitmap* pix = new Graphics::TBitmap(); // obyek baru bernama pix menggunakan komponen bmp

RGBTRIPLE* t; //RGBTRIPLE merupakan komponen TBitmap dengan inisialisasi t

int cycle = 0;

int step;

bool stop = false;

//—————————————————-

void renderBMP(Graphics::TBitmap* picture) //proses rendering dengan fungsi renderBMP

{

Form1->Canvas->Draw(0, 0, pix); //menggunakan form1 maka besar gambar akan memenuhi form yang dipake

}

//—————————————————

void bmpAlter(Graphics::TBitmap* picture) //proses alter

{

stop = false;

Form1->Button4->Caption = “Stop”; //jika alter dipencet atau dijalankan maka button 4(button stop) captionnya kaan berubah

while (!stop)

{

for (step = 0; step < 256; step++) //jumlah warna 256

{

if (stop) break; //proses berhenti sejenak unutk proses pembacaan dimulai lagi

for (int y = 0; y < pix->Height; y++) //saat berhenti sejenak makan y menjadi 0

{

t = (RGBTRIPLE*)picture->ScanLine[y]; // scan garis yang terbuat dari titik2

for (int x = 0; x < pix->Width; x++)

{

t->rgbtRed++; //tambah warna merah saat proses alter

t->rgbtGreen–;//kurangi warna hijau

t->rgbtBlue++;//kurangi warna biru

t++;

}

}

Form1->Canvas->Draw(0, 0, pix);

cycle++; // nilai cycle ditambah secara otomatis

if (cycle > 255) cycle = cycle -256;

Form1->Edit1->Text = cycle;

Application->ProcessMessages();

}

}

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if (OpenPictureDialog1->Execute() )

pix->LoadFromFile(OpenPictureDialog1->FileName); //memilih sebuah file dari openpicturedialog

}

//——————————————————————-

void __fastcall TForm1::Button2Click(TObject *Sender)

{

renderBMP(pix); //memanggil fungsi randerbmp-> menempatkan gambar pada form 1

}

//——————————————————————-

void __fastcall TForm1::Button3Click(TObject *Sender)

{

bmpAlter(pix); //memanggil fungsi bmpAlter();

}

//——————————————————————-

void __fastcall TForm1::Button4Click(TObject *Sender)

{

stop = !stop;

if (stop) {

Button4->Caption = “Start”; //merubah caption button stop mjd star

}

else {

Button4->Caption = “Stop”;//merubah caption button stop

bmpAlter(pix);

}

Application->ProcessMessages();

}

//——————————————————————-

void __fastcall TForm1::Edit1Change(TObject *Sender)

{

cycle = 0;

Form1->Edit1->Text = cycle; //jika adatext yang bisa dibaca maka akan berubah jika tidak ada maka defaultnya 0

}

//——————————————————————-

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

delete pix; //agar gambar tidak tertinggal didalam program.

}

Outputnya:

render

render3

~ by adheximut on May 11, 2009.

Leave a comment