Rabu, 13 Mei 2009

grafika 7

R E N D E R I N G

1. 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

2. 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.


3. 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.


4. SHININESS

Shininess merupakan pemberian efek cahaya sehingga menimbulkan warna yang berkilauan. Efek berkilauan ini untuk melengkapi efek cahaya diffuse, specular dan ambient pada saat cahaya mengenai permukaan objek.

5. TEXTURING

Texturing merupakan proses penambahan tekstur ke permukaan objek. Penambahan tekstur ini dapat dilakukan dengan dua cara, yaitu :

1. Tambahkan citra bitmap atau citra lainnya ke permukaan objek,
2. Memodifikasi nilai vector normal pada permukaan objek sehingga pemberian cahaya pada permukaan didistorsi.


Script Program :


//------------------------------------------------------------------

#include

#pragma hdrstop

#include "Unit1.h"

//------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//------------------------------------------------------------------Graphics::TBitmap* pix = new Graphics::TBitmap();

RGBTRIPLE* t;

int cycle = 0;

int step;

bool stop = false;

void renderBMP(Graphics::TBitmap* picture)

{

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

}

//--------------------------------------------------- ALTER BITMAP FUNCTION

void bmpAlter(Graphics::TBitmap* picture)

{

stop = false;

Form1->ButtonStop ->Caption = "Stop";

while (!stop)

{

for (step = 0; step <>

{

if (stop) break;

for (int y = 0; y <>Height; y++)

{

t = (RGBTRIPLE*)picture->ScanLine[y];

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

{

t->rgbtRed++;

t->rgbtGreen--;

t->rgbtBlue++;

t++;

}

}

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

cycle++;

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);

}

//------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

renderBMP(pix);

}

//------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

bmpAlter(pix);

}

//------------------------------------------------------------------

void __fastcall TForm1::ButtonStopClick(TObject *Sender)

{

stop = !stop;

if (stop) {

ButtonStop->Caption = "Start";

}

else {

ButtonStop ->Caption = "Stop";

bmpAlter(pix);

}

Application->ProcessMessages();

}

//------------------------------------------------------------------

void __fastcall TForm1::Edit1Click(TObject *Sender)

{

cycle = 0;

Form1->Edit1->Text = cycle;

}

//------------------------------------------------------------------

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

{

delete pix;

}

//------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

}

//------------------------------------------------------------------



Output :


























grafika 6

Transformasi objek 3D merupakan perluasan dan teknik. Sebagaimana dalam transformasi 2D, sembarang transformasi dapat disajikan ke dalam suatu matrik transformasi dan transformasi yang lebih rumit dapat dinyatakan oleh sebuah matrik transformasi yang merupakan gabungan dari matrik-matrik transformasi dasar yang ada.

Dengan M adalah matrik 3x3


Script Program :


#include

#include

#pragma hdrstop

#include "trans3d.h"

#pragma resource "*.dfm"

TForm1 *Form1;

struct Elemen { float x,y ;} ;

Elemen Objek[17];

===========================================================================

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

===========================================================================

void __fastcall TForm1::FormShow(TObject *Sender)

{

int i;

Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);

Image1->Canvas->MoveTo(Objek[4].x,Objek[4].y);

for (i=1;i<=4;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};

Image1->Canvas->MoveTo(Objek[8].x,Objek[8].y);

for (i=5;i<=8;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};

Image1->Canvas->MoveTo(Objek[10].x,Objek[10].y);

for (i=9;i<=10;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};

Image1->Canvas->MoveTo(Objek[12].x,Objek[12].y);

for (i=11;i<=12;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};

Image1->Canvas->MoveTo(Objek[14].x,Objek[14].y);

for (i=13;i<=14;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};

Image1->Canvas->MoveTo(Objek[16].x,Objek[16].y);

for (i=15;i<=16;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};

}

===========================================================================

void __fastcall TForm1::FormActivate(TObject *Sender)

{

Objek[1].x = 100; Objek[1].y = 50;

Objek[2].x = 50; Objek[2].y = 50;

Objek[3].x = 50; Objek[3].y = 100;

Objek[4].x = 100; Objek[4].y = 100;

Objek[5].x = 125; Objek[5].y = 125;

Objek[6].x = 75; Objek[6].y = 125;

Objek[7].x = 75; Objek[7].y = 175;

Objek[8].x = 125; Objek[8].y = 175;

Objek[9].x = 100; Objek[9].y = 100;

Objek[10].x = 125; Objek[10].y = 175;

Objek[11].x = 50; Objek[11].y = 100;

Objek[12].x = 75; Objek[12].y = 175;

Objek[13].x = 50; Objek[13].y = 50;

Objek[14].x = 75; Objek[14].y = 125;

Objek[15].x = 100; Objek[15].y = 50;

Objek[16].x = 125; Objek[16].y = 125;

FormShow(Sender);

}

===========================================================================

void __fastcall TForm1::BtTransAtasClick(TObject *Sender)

{ int i;

for (i=1;i<=16;i++){ Objek[i].y-=5;};

FormShow(Sender);

}

===========================================================================

void __fastcall TForm1::BtTransKiriClick(TObject *Sender)

{ int i;

for (i=1;i<=16;i++){ Objek[i].x-=5;};

FormShow(Sender);

}

===========================================================================

void __fastcall TForm1::BtTRansKananClick(TObject *Sender)

{

int i;

for (i=1;i<=16;i++){ Objek[i].x+=5;};

FormShow(Sender);

}

void __fastcall TForm1::BtTransBawahClick(TObject *Sender)

{ int i;

for (i=1;i<=16;i++){ Objek[i].y+=5;};

FormShow(Sender);

}

===========================================================================

void __fastcall TForm1::BtZoomInClick(TObject *Sender)

{ int i;

for (i=1;i<=16;i++)

{ Objek[i].y*=2;

Objek[i].x*=2;

};

FormShow(Sender);

}

void __fastcall TForm1::BtZoomOutClick(TObject *Sender)

{ int i;

for (i=1;i<=16;i++)

{

Objek[i].y/=2;

Objek[i].x/=2;

};

FormShow(Sender);

}

===========================================================================

void __fastcall TForm1::BtPtrSBKoorClick(TObject *Sender)

{ Elemen TempObjek[17];

int i; float Sdt;

for (i=1;i<=16;i++)

{

Objek[i].x=Objek[i].x-Image1->Width / 2;

Objek[i].y=Objek[i].y-Image1->Height / 2;

Sdt=10*M_PI/180;

TempObjek[i].x=(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));

TempObjek[i].y=(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));

Objek[i]=TempObjek[i];

Objek[i].x=Objek[i].x+Image1->Width / 2;

Objek[i].y=Objek[i].y+Image1->Height / 2;

}

FormShow(Sender);

}

===========================================================================

void __fastcall TForm1::BtPtrTTClick(TObject *Sender)

{ Elemen TempObjek[17];

int i,n,m; float Sdt;

for (i=1;i<=16;i++)

{

n = Objek[3].x;

m = Objek[3].y;

Objek[i].x=Objek[i].x-n;

Objek[i].y=Objek[i].y-m;

Sdt=10*M_PI/180;

TempObjek[i].x=(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));

TempObjek[i].y=(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));

Objek[i]=TempObjek[i];

Objek[i].x=Objek[i].x+n;

Objek[i].y=Objek[i].y+m;

}

FormShow(Sender);

}

void __fastcall TForm1::BTDefaultClick(TObject *Sender)

{

FormActivate(Sender);

}

===========================================================================

void __fastcall TForm1::BtCloseClick(TObject *Sender)

{

Close();

}


OUTPUTNYA