Ti-2-kelompok-6

  • Uploaded by: Armin
  • 0
  • 0
  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Ti-2-kelompok-6 as PDF for free.

More details

  • Words: 1,627
  • Pages: 14
-Grafika Komputer“Shading & Optical view”

Oleh : Reyinhart Dennisen. P. M (52007047) Suci Muliani Putri (52007052) Wilson Citra (52007059) Teknik Informatika STMIK Kharisma 2007-2008

Normal Vector Normal vector adalah vector yang arahnya tegak lurus pada luasan (face). Normal vector dapat diperoleh dari perkalian silang (cross-product) dari dua vector yang berada pada luasan (face). Besar dari normal vector bergantung pada hasil perkalian silangnya. Berikut gambar dari vector normal : N = V1 x V 2

V2 V1

Unit Vector Unit vector adalah vector yang besarnya adalah satu satuan dan arahnya tergantung arah vector asalnya. Besar suatu vector dapat diperoleh dengan :

Agar vector v menjadi unit vector, maka semua koefisien ( . Implementasi unit vector :

) di bagi dengan

Vector3D_t unitVector(vector3D_t vec) { int i; float vec2=0.; float vec1, invvec1; for(i=0;1<3;i++) vec2+=vec.v[i]*vec.v[i]; vec1=sqrt(vec2); if (vec1!=0.) { invvec1=1./vec1; for(i=0;i<3;i++) vec.v[i]*=invvec1; } vec.v[3]=1; return vec; }

Optical Model (Model Pencahayaan) Optical model adalah model yang menggambarkan bagaimana vector – vector yang berhubungan dengan pencahayaan dinyatakan. Dalam optical model ini terdapat 4 macam vector, yaitu: 1. Vector cahaya (light vector), yaitu vector yang menyatakan arah cahaya

yang datang. 2. Vector normal pada face. 3. Vector pantulan (reflection vector), yaitu vector yang menyatakan arah

pantulan cahaya setelah cahaya mengenai face. 4. Vector pandangan (view vector), yaitu vector yang menyatakan arah

pandangan mata. Berikut gambar dari optical view :

N

R

L

V α

α

β

Dimana : *Direction Vectors → |L| = |N| = |R| = |V| = 1 * vector L, N, R, V merupakan unit vector, jadi vector L, N, R, dan V bernilai 1 (satu) Macam – macam optical model, yaitu : 1. Diffuse Scattering 2. Specular Reflection 3. Ambient 4. Lambert’s Law

5. Phong Model

Diffuse Scattering Diffuse Scattering merupakan model optical yang paling sederhana, dimana cahaya dari arah light vector disebarkan ke segala arah pada face secara merata. Diffuse merupakan warna yang diserap dari sinar yang mengenai benda secara langsung. Sinar yang mengenai benda tidak semuanya diserap, sebagian akan dipantulkan ke segala arah dengan intensitas yang sama, karena tidak semua permukaan objek terkena sinar secara langsung, maka makin menjauh dari sumber cahaya, nilai diffuse objek akan makin kecil. Berikut gambar dari diffuse scattering :

N L

Dimana : Id = Is kd MAX(cosα,0) cosα = L . N Id

: Intensity of the diffuse component

Is

: Intensity of the Light Source

kd

: Diffuse reflection coeffisient

Specular Reflection Model specular reflection adalah model optik yang menyatakan bahwa cahaya yang mengenai face akan dipantulkan secara spherical searah vector refleksinya. Specular merupakan warna yang terjadi karena sinar yang mengenai objek dipantulkan secara sempurna. Hal ini terjadi karena permukaan objek yang dikenai sinar memiliki permukaan yang halus. Berikut gambar dari specular reflection :

N L

R V

Model specular reflection dapat dinyatakan dengan: Isp = Is ksp MAX(cosn β,0) cos β = R . V R = 2N(L . N) – L Isp

: Intensity of the Specular Reflection

Is

: Intensity of the Light Source

ksp

: Specular Reflection coeffisient

n

: constant from experiment (1-200)

R = 2N(L . N) – L ♦ L . N = R . N, R = aL + bN L . N = (aL + bN) . N b = (1 – a) L . N R = aL + {(1 – a) L . N} N R2 = 1, (L2 = 1, N2 = 1) then a = ±1

→ a = –1

Ambient Ambient adalah keadaan dimana cahaya refleksi mengalami pengurangan tingkat kecerahan. Ambient merupakan warna yang terlihat meskipun benda tidak dikenai sinar secara langsung. Warna tersebut terjadi karena pantulan cahaya dari benda lain yang dikenai cahaya secara langsung. Model ambient ini dapat dinyatakan dengan : Ia = Is ka Ia

: Intensity of the Ambient Reflection

Is

: Intensity og the Light Source

ka

: Ambient reflection coefficient

Lambert’s Law Untuk menentukan suatu pantulan diffuse yang ideal digunakan hukum Lambert, yang berbunyi : “energi yang dipantukan dari suatu permukaan area yang kecil dari arah tertentu sama bersarnya dengan cosines dari sudut antara arah datangnya cahaya dan sudut normal”. Lambert’s law merupakan model optik yang menggabungnkan diffuse scattering dan peristiwa ambient secara bersama – sama sehingga diperoleh model sebagai berikut :

CL = Cs { kd MAX(cosα,0)+ka } cos α = L . N CL

: Reflection Color

Cs

: Surface Color

Phong Model Phong model adalah model optik yang lengkap, dimana kejadian diffuse scattering, specular reflection dan peristiwa ambient digabungkan menjadi satu model. Phong model ini merupakan model standar yang digunakan untuk menyatakan optical view pada grafika komputer. Model ini dinyatakan dengan : CL = Cs { kd MAX(cosα,0)+ka } + Cwhite ksp MAX(cosn β,0) cos α = L . N cos β = R . V R = 2N(L . N) – L CL

: Reflection Color

Cs

: Surface Color

Cwhite

: Specular Color (white)

Implementasi phong model : Color_t PhongModel(vector3D_t Light,vector3D_t Normal, vector3D_t View,color_t col) { float kspe=0.7; //specular reflection coefficient float kdif=0.6; //diffuse reflection coefficient float kamb=0.4; //ambient light coefficient float tmp,NL,RV; color_t ColWhite={1,1,1}; vector3D_t ReflectionVector=(2.*(Light*Normal)*Normal)Light; tmp=Normal*Light; NL=funcPositive(tmp); tmp=ReflectionVector*View; RV=funcPositive(tmp); return kdif*NL*col+kspe*power(RV,4)*ColWhite+kamb*col; }

Pada implementasi phong model ini terlihat bahwa koefisien dari masing – masing keadaan, yaitu koefisien diffuse scattering, koefisien specular reflection dan koefisien ambient dinyatakan sebagai konstanta. Nilainya antara 0 sampai dengan 1, dan dapat diatur sesuai dengan histogram level cahaya yang diinginkan. Nilai – nilai ini sangat besar pengaruhnya pada hasil pencahayaan. Hasil dari optical view ini berupa satu warna atau satu tingkat kecerahan. Pada implementasi phong shading diatas, efek warna paling terang adalah putih (1,1,1) sehingga bila vector pandangan mata dan vector refleksi jatuh pada vector normal maka warna yang akan ditampilkan adalah putih.

Wireframe Model (Model Kerangka) Wireframe model adalah suatu cara pemodelan obyek 3D yang paling sederhana. Obyek yang dimodelkan akan digambar seperti jaring – jaring jala. Wireframe model berisi sekumpulan titik (vertex) dan sekumpulan rusuk (edge) yang menghubungkan setiap pasang titik. Misalnya ada titik 1, 2 dan 3. Kemudian rusuk pertama menghubungkan titik 1 dan titik 2 sedangkan rusuk 2 menghubungkan titik 1 dengan titik 3. Vertex – vertex dan semua edge disimpan dalam suatu database yang akan diakses selama proses penggambaran. Bisa dikatakan bahwa wireframe model menyimpan obyek 3D dalam dua daftar, yaitu daftar vertex dan daftar edge. Daftar vertex menyimpan informasi titik – titik pembentuk permukaan obyek dan daftar edge menyimpan relasi antar titik. Kedua daftar ini disimpan secara terpisah tetapi tetap menjadi satu kesatuan sehingga hanya bisa diakses untuk menggambar suatu obyek tertentu. Satu daftar vertex hanya diakses oleh daftar egde pasangannya. Jika suatu daftar vertex diakses oleh daftar edge yang bukan pasangannya maka tidak akan menghasilkan obyek yang benar. Bisa dikatakan relasi kedua table tersebut adalah relasi one to one. Dengan alasan kemudahan dan kecepatan akses, cara yang paling sering digunakan untuk menyimpan kedua daftar ini adalah dengan menggunakan array atau list. Obyek yang akan dimodelkan terlebih dahulu dicari titik – titik pembentuk permukaannya. Titik pembentuk permukaan obyek ini bisa ditentukan dengan menggunakan rumus obyek seperti yang sudah ditulis diatas. Cara yang sering digunakan untuk membuat wireframe model dari obyek yaitu dengan menyimpan titik – titik pembentuk permukaannya dalam array 2D.

Shading Pada penggambaran objek 3D, efek yang paling mempengaruhi benda sehingga akan terlihat nyata atau tidak adalah efek shading, yaitu efek pewarnaan tingkat kecerahan setiap face yang terdapat pada objek gambar. Efek shading ini menggunakan optical model sebagai sarana perhitungannya.

Flat Shading Flat shading merupakan cara pewarnaan paling mudah dari objek 3D, karena flat shading hanya memperhitungkan posisi cahaya untuk menentukan warna objek, dalam satu polygon hanya ada satu warna saja. Jika objek terkena sinar secara langsung maka face yang dikenai tersebut akan terlihat paling terang, sedangkan face yang menjauhi face tersebut akan berwarna lebih gelap dan semakin jauh dari face tersebut warna akan mendekati hitam, sehingga bentuk objek tampak tidak nyata karena bentuknya seperti bersegi – segi. Berikut contoh gambar dari flat shading :

Implementasi flat shading : if(NormalVector.v[2]>0.) { NormalVector=unitVector(NormalVector); fillcol=PhongModel(LightVector,NormalVector,ViewVector,col ); fillPolygon(p,bola.fc[i].NumberofVertices,fillcol); }

Nb : col adalah variable warna, yang menyatakan warna dasar dari objek.

Gouraud Shading gouraud shading merupakan cara pewarnaan objek 3D, dimana satu face mempunyai gradasi warna yang memperhitungkan tingkat kecerahan setiap titik pada face tersebut. Dengan teknik shading ini dihasilkan warna yang halus gradasinya. Teknik shading ini memerlukan vector normal pada setiap titiknya dan menggunakan fungsi gradatePolygon untuk menyatakan Gouraud Shading. Berikut contoh gambar dari gouraud shading :

Implementasi gouraud shading : for (i=0;i<sphere.NumberofVertices;i++) { vec[i]=Point2Vector(sphere.pnt[i]); vec[i]=mat*vec[i]; nrmvec[i]=mat*sphere.NormalVector[i]-ZeroVector; }

Teknik penggambaran objek 3D menggunakan gouraud shading adalah sebagai berikut : 1. Setiap titik yang terdapat pada objek harus didefinisikan vector normalnya terlebih dahulu. 2. Vector normal setiap titik akan menyesuaikan arahnya berdasarkan matriks transformasi yang dikenakan pada titik.

Implementasi gouraud shading : if (0.<normalzi) { for (j=0;j<sphere.fc[i].NumberofVertices;j++) { buff[j]=Vector2Point2D(vecbuff[j]); NormalVector=unitVector(nrmvecbuff[j]); colbuff[j]=PhongModel(LightVector,NormalVector,ViewVector ,ColCyan); } gradatePolygon(buff,colbuff,sphere.fc[i].NumberofVertices ); }

Listing Program /* Gunakan Tombol/huruf w,s ==> memutar ke atas bawah a,d ==> memutar kiri kanan */ #include #include<stdlib.h> float angle=0.0; float angley=0.0; void enable(){ glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_COLOR_MATERIAL); } void gambar(){ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); enable(); glLoadIdentity(); glTranslatef(0.0,0,-5); glRotatef(angle,1.0,0.0,0.0); glRotatef(angley,0,1.0,0.0); glColor3f(0.85,1.2,0.0); glutSolidTeapot(1); glTranslatef(0.0,0,-5); glRotatef(angle,1.0,0.0,0.0); glRotatef(angley,0,1.0,0.0); glColor3f(0.85,1.2,0.0); glutWireTeapot(2); glutSwapBuffers(); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei)w, (GLsizei)h); //set the viewport to the current window specifications glMatrixMode (GL_PROJECTION); //set the matrix to projection glLoadIdentity (); gluPerspective (60, (GLfloat)w / (GLfloat)h, 0.1, 10.0); //set the perspective (angle of sight, width, height, ,depth) glMatrixMode (GL_MODELVIEW); //set the matrix back to model }

void keyboard (unsigned char key, int x, int y) { if (key=='w'){ angle+=1; if (angle>360) angle-=360; } if (key=='a'){ angley+=1; if (angley>360) angley-=360; } if (key=='d') { angley-=1; if (angley<-360) angley+=360; }

}

if (key=='s') { angle-=1; if (angle<-360) angle+=360;

} void main(int argc,char **argv){ glutInit(&argc,argv); glutInitWindowPosition(100,100); glutInitWindowSize(640,480); glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH); glutCreateWindow("Shading By Kelompok 6"); glClearColor(0.0f,0.0f,0.0f,0.0f); gluOrtho2D(0,640,0,480); glutIdleFunc(gambar); glutDisplayFunc(gambar); glutReshapeFunc (reshape); glutKeyboardFunc (keyboard); glutMainLoop(); }

More Documents from "Armin"