<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7903546118810218715</id><updated>2011-09-05T05:59:55.745-07:00</updated><title type='text'>Tugas Pemrograman Grafik</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://redtakrip.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7903546118810218715/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://redtakrip.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>T@krip!</name><uri>http://www.blogger.com/profile/05171962652471735949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7903546118810218715.post-8808730090724795394</id><published>2009-02-02T04:51:00.002-08:00</published><updated>2009-02-13T10:11:43.532-08:00</updated><title type='text'>Transformasi 2d</title><content type='html'>Transformasi dua dimensi&lt;br /&gt;Dasar Teori&lt;br /&gt;&lt;br /&gt;Viewport&lt;br /&gt;Objek yang akan digambar pada layar biasanya memiliki ukuran yang jauh lebih besar dibanding ukuran layar, sehingga perlu dilakukan pemetaan/transformasi yang memungkinkan objek tersebut bisa digambar pada layar. Meskipun  demikian, objek seringkali terlalu rumit untuk ditampilkan pada layar dengan koordinat yang sangat terbatas. Sehingga biasanya kita memilih bagian tertentu  dari objek untuk ditampilkan pada layar. Didalam memilih objek yang akan ditampilkan biasanya dibatasi oleh sebuah kotak yang disebut dengan jendela (window).&lt;br /&gt;Dalam praktek kita bisa menggunakan seluruh atau sebagian lebar layar untuk menmpilkan objek yang berada pada sebuah jendela. Daerah layar yang dipilih untuk menampilkan objek yang dimaksud disebut viewport. Dalam keadaan normal, viewport akan meliputi seluruh layar lebar. Meskipun demikian, kita bisa memilih bagian tertentu dari layar untuk dijadikan sebuah viewport.&lt;br /&gt;Transformasi&lt;br /&gt;Sejumlah objek seringkali mempunyai sifat simetri. Sehingga untuk menggambar seluruh objek, cukup dilaksanakan dengan melakukan manipulasi terhadap objek yang sudah ada, misalnya dengan pencerminan, pergeseran, atau pemutaran objek yang sudah digambar terlebih dahulu.&lt;br /&gt;Kita akan mempelajari cara mentransformasikan objek grafis khususnya objek grafis 2D sebagai salah satu cara untuk memanipulasi objek grafis dan sistem koordinat yang dipakai  dengan cara yang lebih terorganisir dan efisien. Salah satu contoh penting untuk diketahui adalah pemakaian transformasi jendela ke viewport.&lt;br /&gt;Ada dua cara untuk melakukan transformasi, yaitu transformasi objek dan transformasi kordinat. Pada transformasi objek  semua titik pada sembarang objek akan dirubah sesuai dengan aturan tertentu sementara kordinatnya tetap. Pada transformasi sistem koordinat, objek tetap tetapi karena sistem koordinatnya diganti maka kedudukan objek harus disesuaikan dengan kedudukan sistem kordinat yangbaru.&lt;br /&gt;Jenis-jenis transformasi&lt;br /&gt;1.Translasi&lt;br /&gt;Sembarang titik pada bidang xy bisa digeser ke sembarang tempat dengan menambahkan besaran pada absis x dan ordinat y. Translasi adalah transformasi dengan bentuk tetap memindahkan objek apa adanya. Dengan  menggunakan persamaan Q = PM + tr, maka hasil pergeseran bisa dinyatakan sbb:&lt;br /&gt;(Qx, Qy) = (Px +trx, Py+try)&lt;br /&gt;dimana trx adalah vektor translasi menurut sumbu x sedang  try adalah vektor translasi menurut sumbu y, dan matrik M bisa dikatakan sebagai matrix identitas.&lt;br /&gt;Sembarang objek bisa digeser ke posisinya yang baru dengan mengoperasikan persamaan diatas pada setiap titik dari objek tersebut. Hal ini karena setiap garis dari objek tersebut terdiri dari titik-titik yang jumlahnya tak terbatas, maka proses penggeseran bisa berlangsung sangat lama. Tetapi pada kenyataannya kita cukup menggeser dua titik ujungnya saja dan kemudian menggandeng dua titik tersebut untuk membentuk garis hasil pergeseran.&lt;br /&gt;Contoh translasi:&lt;br /&gt;Untuk menggambarkan translasi  objek yang berupa garis dengan koordinat A(10,10), B(30,10) dengan vektor translasi (10,20)&lt;br /&gt;&lt;br /&gt;Titik A     Qx=Px +trx  =10 + 10 =20&lt;br /&gt;Qy=Py + try =10+20=30&lt;br /&gt;Hasil translasi A =  (20, 30)&lt;br /&gt;Titik B     Qx=Px + trx = 30+10 = 40&lt;br /&gt;Qy=Py + try = 10+20 =30&lt;br /&gt;Hasil translasi B =  (40, 30)&lt;br /&gt;&lt;br /&gt;2.Rotasi&lt;br /&gt;Kita bisa memutar objek searah dengan arah perputaran jarum jam(dinyatakan dengan sudut negatif) atau berlawanan arah dengan arah jarum jam(dinyatakan sebagai sudut positif).&lt;br /&gt;Dengan menganggap bahwa besarnya sudut putar adalah sama dengan , maka posisi sebuah titik yang baru adalah:&lt;br /&gt;Qx  = Pxcos()  -  Pysin()&lt;br /&gt;Qy  = Pxsin()  +  Pycos()&lt;br /&gt;Dengan menggunakan notasi matrix, maka besaran M bisa dikatakan sbb:&lt;br /&gt; M   =cos(0)   sin(0)&lt;br /&gt;         -sin(0)   cos(0)&lt;br /&gt;&lt;br /&gt;3.Skala&lt;br /&gt;Penskalaan adalah proses untuk memperbesar atau memperkecil suatu gambar. Dengan faktor absolut yang lebih besar dari 1, akan diperoleh gambar yang lebih besar dan semakin menjauh dari titik(0,0). Sebaliknya dengan faktor skala yang mempunyai nilai absolut lebih kecill dari 1, akan diperoleh gambar yang lebih kecil dan mendekat ke titik (0,0).&lt;br /&gt;Dengan menggunakan persamaan Q=PM+tr, maka hasil penggeseran  bisa dinyatakan sebagai:&lt;br /&gt;(Qx, Qy)=(SxPx, SyPy)&lt;br /&gt;Dengan Sx adalah faktor skala ke arah mendatar  dan Sy adalah faktor skala arah tegak dan ofset vektor tr bernilainol. Dengan menggunakan notasi matrix, maka matrixM bisa dinyatakan sbb:&lt;br /&gt;M= (sx     0)&lt;br /&gt;(0       sy)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PROGRAM TRANSFORMASI&lt;br /&gt;&lt;br /&gt;Dengan memakai delphi, Buatlah program dengan tampilan seperti dibawah ini. Bila program dijalankan, ada dua pilihan:&lt;br /&gt;Jenis transformasi Memutar&lt;br /&gt;Jika memilih transformasi memutar kita disuruh menginputkan besar sudut yang diminta dan kemudian inputkan x1, y1, x2, y2 lalu klik gambar maka akan tampil gambar pada kotak paintbox dan klik transformasi maka gambar akan memutar sesuai sudut yang diisi. Dan gambar asli tetap nampak.&lt;br /&gt;Jenis transformasi Perbesar/perkecil&lt;br /&gt;Jika memilih transformasi perbesar/perkecil  kita disuruh menginputkan besar skalanya dan kemudian inputkan x1, y1, x2, y2 lalu klik gambar maka akan tampil gambar pada kotak paintbox dan klik transformasi maka gambar akan tampil  sesuai skala  yang diisi.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;programnya adalah sbb:&lt;br /&gt;rogram transformasi gambar&lt;br /&gt;procedure TForm1.GambarClick(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;if ((IsiX1.Text='')or (IsiX2.text='') or (IsiY1.text='' )or (IsiY2.text='')or&lt;br /&gt;(IsiX1.Text=' ')or (IsiX2.text=' ') or (IsiY1.text=' ' )or (IsiY2.text=' ')) then&lt;br /&gt;MessageDlg('X1, Y1, X2 dan Y2 harus anda isi',mtWarning, [mbOk],0)&lt;br /&gt;else&lt;br /&gt;with ttk do&lt;br /&gt;begin&lt;br /&gt;x1 := strtoint(IsiX1.Text);&lt;br /&gt;y1 := strtoint(IsiY1.Text);&lt;br /&gt;x3 := strtoint(IsiX2.Text);&lt;br /&gt;y3 := strtoint(IsiY2.Text);&lt;br /&gt;x2 := x3;&lt;br /&gt;y2 := y1;&lt;br /&gt;x4 := x1;&lt;br /&gt;y4 := y3;&lt;br /&gt;xn := (x3 + x1) div 2;&lt;br /&gt;yn := (y3 + y1) div 2;&lt;br /&gt;PaintBox1.Canvas.Brush.Color := claqua;&lt;br /&gt;Paintbox1.Canvas.Polygon([Point(x1, y1), Point(x2, y2), point(x3, y3), Point(x4, y4)]);&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;procedure TForm1.RadioTransformasiClick(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;if RadioTransformasi.ItemIndex =0 then&lt;br /&gt;begin&lt;br /&gt;Label1.Caption := 'Besar Sudut';&lt;br /&gt;pil.caption:='Derajat';&lt;br /&gt;end&lt;br /&gt;else&lt;br /&gt;begin&lt;br /&gt;Label1.Caption := 'Besar Skala';&lt;br /&gt;pil.caption:='Kali';&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;{ procedure transformasi }&lt;br /&gt;&lt;br /&gt;procedure TForm1.TransformasiClick(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;temp : Titik;&lt;br /&gt;tet : integer;&lt;br /&gt;s, kali : real;&lt;br /&gt;lebar, tinggi : integer;&lt;br /&gt;begin&lt;br /&gt;{transformasi untuk memutar }&lt;br /&gt;if ((IsiX1.Text='')or (IsiX2.text='') or (IsiY1.text='' )or (IsiY2.text='')or&lt;br /&gt;(IsiX1.Text=' ')or (IsiX2.text=' ') or (IsiY1.text=' ' )or (IsiY2.text=' ')&lt;br /&gt;or (IsiPil.text='')or (IsiPil.text=' ') or (RadioTransformasi.ItemIndex=-1)) then&lt;br /&gt;MessageDlg('PENGISIAN DATA BELUM LENGKAP',mtWarning, [mbOk],0)&lt;br /&gt;else&lt;br /&gt;if RadioTransformasi.itemindex = 0 then&lt;br /&gt;begin&lt;br /&gt;with ttk do&lt;br /&gt;begin&lt;br /&gt;tet:=strtoint(IsiPil.text);&lt;br /&gt;s := tet * pi / 180;&lt;br /&gt;temp.x1 := xn + round((x1 - xn)*(cos(s))-(y1 - yn)*(sin(s)));&lt;br /&gt;temp.x2 := xn + round((x2 - xn)*(cos(s))-(y2 - yn)*(sin(s)));&lt;br /&gt;temp.x3 := xn + round((x3 - xn)*(cos(s))-(y3 - yn)*(sin(s)));&lt;br /&gt;temp.x4 := xn + round((x4 - xn)*(cos(s))-(y4 - yn)*(sin(s)));&lt;br /&gt;temp.y1 := yn + round((x1 - xn)*(sin(s))+(y1 - yn)*(cos(s)));&lt;br /&gt;temp.y2 := yn + round((x2 - xn)*(sin(s))+(y2 - yn)*(cos(s)));&lt;br /&gt;temp.y3 := yn + round((x3 - xn)*(sin(s))+(y3 - yn)*(cos(s)));&lt;br /&gt;temp.y4 := yn + round((x4 - xn)*(sin(s))+(y4 - yn)*(cos(s)));&lt;br /&gt;end;&lt;br /&gt;ttk.x1 := temp.x1;&lt;br /&gt;ttk.x2 := temp.x2;&lt;br /&gt;ttk.x3 := temp.x3;&lt;br /&gt;ttk.x4 := temp.x4;&lt;br /&gt;ttk.y1 := temp.y1;&lt;br /&gt;ttk.y2 := temp.y2;&lt;br /&gt;ttk.y3 := temp.y3;&lt;br /&gt;ttk.y4 := temp.y4;&lt;br /&gt;PaintBox1.Canvas.Brush.Color :=clred;&lt;br /&gt;with ttk do&lt;br /&gt;Paintbox1.canvas.Polygon([Point(x1, y1), Point(x2, y2), Point(x3, y3), Point(x4, y4)]);&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;{transformasi untuk memperbesar/memperkecil }&lt;br /&gt;else&lt;br /&gt;begin&lt;br /&gt;kali :=strtofloat(IsiPil.text);&lt;br /&gt;with ttk do&lt;br /&gt;begin&lt;br /&gt;lebar := x3 - x1;&lt;br /&gt;tinggi := y3 - y1;&lt;br /&gt;x1 := xn - round(lebar  / 2  * kali );&lt;br /&gt;x3 := xn + round(lebar  / 2  * kali );&lt;br /&gt;y1 := yn - round(tinggi / 2  * kali );&lt;br /&gt;y3 := yn + round(tinggi / 2  * kali );&lt;br /&gt;x2 := x3;&lt;br /&gt;y2 := y1;&lt;br /&gt;x4 := x1;&lt;br /&gt;y4 := y3;&lt;br /&gt;end;&lt;br /&gt;PaintBox1.Canvas.Brush.Color := clblue;&lt;br /&gt;with ttk do&lt;br /&gt;Paintbox1.canvas.Polygon([Point(x1, y1), Point(x2, y2), Point(x3, y3), Point(x4, y4)]);&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TForm1.KeluarClick(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;Close;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TForm1.HapusClick(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;Paintbox1.Refresh;&lt;br /&gt;Label1.caption := 'Pilihan ';&lt;br /&gt;IsiPil.text    := ' ';&lt;br /&gt;IsiX1.text     := ' ';&lt;br /&gt;IsiX2.text     := ' ';&lt;br /&gt;IsiY1.text     := ' ';&lt;br /&gt;IsiY2.text     := ' ';&lt;br /&gt;RadioTransformasi.itemindex := -1 ;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Downloads :&lt;br /&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/Transformasi.zip"&gt;Transformasi.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/Transformasi_2_Dimensi.zip"&gt;Transformasi2D.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/Program2DDelphi.zip"&gt;Program2DDelphi.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/Program2DDelphi.zip"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7903546118810218715-8808730090724795394?l=redtakrip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redtakrip.blogspot.com/feeds/8808730090724795394/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://redtakrip.blogspot.com/2009/02/transformasi-2d.html#comment-form' title='3 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7903546118810218715/posts/default/8808730090724795394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7903546118810218715/posts/default/8808730090724795394'/><link rel='alternate' type='text/html' href='http://redtakrip.blogspot.com/2009/02/transformasi-2d.html' title='Transformasi 2d'/><author><name>T@krip!</name><uri>http://www.blogger.com/profile/05171962652471735949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7903546118810218715.post-5408376015521011703</id><published>2009-02-02T04:51:00.001-08:00</published><updated>2009-02-13T09:56:59.485-08:00</updated><title type='text'>Transformasi 3d</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;3D Graphics Visual Realism&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Realitas grafis 3D&lt;br /&gt;Yang dimaksud realitas grafis 3D adalah bagimana membentuk suatu obyek 3D agar sesuai dengan  kenyataan suatu obyek yang dilihat sehari-hari.  Sebagian besar obyek nyata bersifat solid atau tidak tembus pandang.&lt;br /&gt;Pada contoh bab sebelumnya obyek yang dibuat masih dalam bentuk rangka (wireframe). Dalam implementasinya model rangka ini masih banyak dipakai untuk mengetahui bagian dlaam suatu obyek.&lt;br /&gt;Relaitas grafis 3D dapat dilakukan dengan : mengarsir  poligon, rendering, dan shadowing.&lt;br /&gt;Pewarnaan dan Arsiran (brush)&lt;br /&gt;Terdapat 3 metode pewarnaan dalam grafis baik untuk mewarnai garis (Pen) maupun mengarsir poligon (Brush)&lt;br /&gt;1.dengan variabel default (bawaan C++ Builder). Biasanya digunakan untuk warna2 dasar&lt;br /&gt;&lt;br /&gt;untuk mewarnai garis&lt;br /&gt;Canvas-&gt;Pen-&gt;Color=clRed ;//garis warna merah&lt;br /&gt;&lt;br /&gt;untuk mewarnai arsiran&lt;br /&gt;Canvas-&gt;Brush-&gt;Color=clRed ;//arsiran warna merah&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;clRed : merah&lt;br /&gt;clBlue:biru&lt;br /&gt;clBlack:hitam&lt;br /&gt;clYellow:kuning&lt;br /&gt;dll&lt;br /&gt;&lt;br /&gt;2.dengan RGB&lt;br /&gt;RGB merupakan warna yang dihasilkan kombinasi dari Red[R]-Green[G]-Blue[B], dengan nilai R:0-255   G:0-255  B:0-255, nilai 0 pada masing2 warna adalah hitam , dan 255 adalah warna maksimal&lt;br /&gt;&lt;br /&gt;untuk mewarnai garis&lt;br /&gt;Canvas-&gt;Pen-&gt;Color=RGB(100,100,100) ;//garis warna abu2&lt;br /&gt;&lt;br /&gt;untuk mewarnai arsiran&lt;br /&gt;Canvas-&gt;Brush-&gt;Color=RGB(0,255,0) ;//arsiran warna hijau&lt;br /&gt;&lt;br /&gt; kombinasi warna dapat dilihat di custom color Msword&lt;br /&gt;3.dengan CMY&lt;br /&gt;CMY seperti haknya RGB meruppakan warna yang dikombinasikan Cyan[C],Magenta[M], Yellow[Y]&lt;br /&gt;tidak dibahas disini&lt;br /&gt;4.dengan HSL&lt;br /&gt;HSL seperti haknya RGB meruppakan warna yang dikombinasikan Hue[H],Saturation[S], Lamp[LY]&lt;br /&gt;tidak dibahas disini&lt;br /&gt;&lt;br /&gt;Gaya arsiran (style)&lt;br /&gt;Arsiran dari suatu poligon dapat dibentuk dalam beberapa macam dengan perintah arsiran adalah&lt;br /&gt;&lt;br /&gt;Canvas-&gt;Brush-&gt;Style=arsiran&lt;br /&gt;Arsiran:&lt;br /&gt;bsSolid: arsiran homogen/solid/pejal&lt;br /&gt;bsCross:arsiran kotak-kotak&lt;br /&gt;bsDiagonal: arsiran bergaris diagonal&lt;br /&gt;bsVertical: arsiran bergaris tegak&lt;br /&gt;bsHorisontal: arsiran bergaris mendatar&lt;br /&gt;dll&lt;br /&gt;&lt;br /&gt;Mode Pen&lt;br /&gt;Garis yang membetuk suatu obyek juga dapat dibentuk&lt;br /&gt;&lt;br /&gt;Canvas-&gt;Pen-&gt;Style=bentuk&lt;br /&gt;Bentuk:&lt;br /&gt;psSolid :garis homogen&lt;br /&gt;psDot:garis berbentuk titik-titik&lt;br /&gt;psDash: garis berbentuk garis kecil2&lt;br /&gt;psDashDot: garis berbentuk kombinasi dash dan dot&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Membuat arsiran pada grafis 3D&lt;br /&gt;1.Ubah perintah Polyline (membentuk bagan sisi banyak -&gt;2- tetapi berbentuk rangka/kawat (wireframe) menjadi Polygon (dapat diarsir/di blok)&lt;br /&gt;2.tulis perintah untuk membuat arsir sebelum masing-masing polygon&lt;br /&gt;Canvas-&gt;Brush-&gt;Color=warna&lt;br /&gt;3.jalankan&lt;br /&gt;4.akan terlihat bahwa tampilan gambar belum dapat diidentifikasi secara jelas –saling tumpang tindih (bentuk belum riil), karena proses penggambaran  poligon belum memenuhi kaidah/algoritma pelukis (painter’s algorithm)&lt;br /&gt;&lt;br /&gt;Algoritma pelukis (painter’s algorithm)&lt;br /&gt;Algoritma pelukis adalah cara/urutan mengarsir suatu obyek yang saling menutupi dimulai dari yang terjauh (dari pengamat) dulu.&lt;br /&gt;&lt;br /&gt;Maka agar pada grafis 3D poligon yang jauh akan tertutup oleh poligon yang dekat dengan pengamat, maka setiap poligon harus diurutkan proses pembuatannya dimulai dari yang terjauh dari pengamat/user (nilai koordinat z paling kecil)&lt;br /&gt;&lt;br /&gt;Untuk mengurutkan poligon , maka nilai koordinat z dari setiap poligon harus dihitung rata-rata dari ke empat titik yg membetuk poligon.&lt;br /&gt;&lt;br /&gt;Berdasarkan z rata-rata setiap poligon ini maka proses penampilan poligon dimulai dari yg bernilai z terkecil (ditulis paling atas pada program)&lt;br /&gt;&lt;br /&gt;Implementasi Poligon dan Arsiran&lt;br /&gt;Untuk membuat suatu obyek menjadi solid maka obyek tersebut harus tersusun atas poligon-poligon. Poligon ini tidak harus segi empat, tetapi bisa segitiga, dlsb sesuai dengan keperluan.&lt;br /&gt;Langkah2 poligonisasi sebagai berikut.&lt;br /&gt;1.Identifikasi titik-titik  poligon yang membetuk suatu obyek, misal poligon 1  adalah bagian depan kotak (titik 1, titik 2,tiitk 3, dan titik 4), poligon 2 bagian belakang kotak (titik 5,titik 6, titik 7, dan titik8) dan seterusnya.&lt;br /&gt;(Identifikasi ini dilakukan sebelum proses transformasi ke koordinat layar misal ,mulai nomor program 124 dst)&lt;br /&gt;2.Urutkan posisi poligon tersebut  berdasarkan nilai z-nya (vpn_pers[I][2]), sehingga poligon dengan nilai z paling kecil diletakkan kapa posisi pertama dst. Hal ini dilakukan agar proses pembuatan arsiran dimulai dari poligon yang paling jauh (algoritma pelukis-painter’s  algorithm).&lt;br /&gt;3.Bila tidak  ada proses pengurutan maka poligon akan saling tumpang-tindih. Nilai z ini dapat dihitung dari nilai z rata-rata titik-titik yang membentuk poligon&lt;br /&gt;4.Lakukan  transformasi ke koordinat layar&lt;br /&gt;5.Gambar poligon beserta arsiran setiap poligon(brush)&lt;br /&gt;Untuk menggambar poligon maka perintah Polyline diganti menjadi Polygon, sedangkan untuk mengarsir, sebelum  perintah poligon, perlu diatur arsiran sbb&lt;br /&gt;Canvas -&gt;Brush-&gt; Color=warna arsir&lt;br /&gt;&lt;br /&gt;Sampai langkah ini realitas obyek sudah mulai nampak , yakni bagian yang berada di belakang tidak nampak lagi, akan tetapi realitas ini masih dapat ditingkatkan yakni dengan efek rendering , yaitu perubahan warna akibat pencahayaan dari posisi tertentu (tidak di bahas disini, ada di buku-buku referensi grafika  komputer), shadowing,   yaitu efek bayangan.&lt;br /&gt;Bila obyek yang akan di proses memilki cakupan yang besar, maka agar proses komputasi lebih cepat diperlukan clipping atau pemotongan (teori ada di berbagai buku referensi).&lt;br /&gt;&lt;br /&gt;Implementasi Program&lt;br /&gt;Untuk menerapkan visual realism dasar dilakukan tahapan sbb&lt;br /&gt;1.Bari aplikasi sebelumnya ubahlah semua kode&lt;br /&gt;……Polyline…. menjadi  …Polygon ………&lt;br /&gt;misal :&lt;br /&gt;PaintBox1-&gt;Canvas-&gt;Polyline((TPoint*)t6,4);&lt;br /&gt;Diganti menjadi&lt;br /&gt;PaintBox1-&gt;Canvas-&gt;Polygon((TPoint*)t6,4);&lt;br /&gt;2.Tambahkan perintah untuk mengarsir poligon sebelum/diatas perintah poligon dengan&lt;br /&gt;……… Canvas-&gt;Brush-&gt;Color=warna..&lt;br /&gt;warna, warna arsiran dapat diatur dengan&lt;br /&gt;   (i) konstanta, misal     biru -&gt; clBlue&lt;br /&gt;                   merah -&gt; clRed&lt;br /&gt;                   kuning-&gt;clYellow&lt;br /&gt;       misal :&lt;br /&gt;……… Canvas-&gt;Brush-&gt;Color=clBlue; arsir biru&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(ii) kombinasi RGB(Red Green Blue-Merah Hijau Biru)                              misal :&lt;br /&gt;……… Canvas-&gt;Brush-&gt;Color=RGB(200,100,0)&lt;br /&gt;       artinya nilai Red:100, Green 100, Blue:0&lt;br /&gt;       masing-masing warna memiliki range 0-255&lt;br /&gt;&lt;br /&gt;misal poligon berwarna merah, maka tambahkan perintah arsir pada setiap poligon sbb&lt;br /&gt;        …………..&lt;br /&gt;       PaintBox1-&gt;Canvas-&gt;Color=clRed;&lt;br /&gt;   PaintBox1-&gt;Canvas-&gt;Polygon((TPoint*)t6,4);&lt;br /&gt;       ……………….&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.Jalankan aplikasi, amati yang terjadi ! Mengapa gambar balok belum seperti yang diharapkan ? artinya wujud balok masih kacau ?&lt;br /&gt;&lt;br /&gt;Pengurutan Poligon&lt;br /&gt;Agar bentuk 3d rterlihat riil maka sesuai dengan algoritma pelukis, maka poligon yang lebih jauh diteampilkan lebih dulu. Didalam pemrograman  untuk menrpakna tersebut dilakukan langkah sbb&lt;br /&gt;1.Buat nilai rata-rata setiap poligon dan tampung dlaam variabel dengan index tersendiri&lt;br /&gt;2.dengan algoritma untuk sorting (misal: bubble sort) , Urutkan setiap nilai  sesuai dengan nilai z-nya.&lt;br /&gt;3.tampilkan poligon tersebut.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Downloads :&lt;br /&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/3D_Graphics_Visual_Realism.zip"&gt;3D Graphics Visual Realism.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/7Grafik3D.zip"&gt;7Grafik3D.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/Trans3D.zip"&gt;Trans3D.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/Transformasi_3_Dimensi.zip"&gt;Transformasi 3 Dimensi.zip&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/Transformasi_3_Dimensi.zip"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7903546118810218715-5408376015521011703?l=redtakrip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redtakrip.blogspot.com/feeds/5408376015521011703/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://redtakrip.blogspot.com/2009/02/transformasi-3d.html#comment-form' title='2 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7903546118810218715/posts/default/5408376015521011703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7903546118810218715/posts/default/5408376015521011703'/><link rel='alternate' type='text/html' href='http://redtakrip.blogspot.com/2009/02/transformasi-3d.html' title='Transformasi 3d'/><author><name>T@krip!</name><uri>http://www.blogger.com/profile/05171962652471735949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7903546118810218715.post-7808828467810823782</id><published>2009-02-02T04:14:00.000-08:00</published><updated>2009-02-13T09:52:21.719-08:00</updated><title type='text'>OpenGL</title><content type='html'>&lt;div style="text-align: center; font-weight: bold;"&gt;Pengenalan openGL&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;OpenGL adalah suatu spefikasi grafik yang low-level yang menyediakan fungsi untuk pembuatan grafik primitif termasuk titik, garis, dan lingkaran. OpenGL digunakan untuk keperluan-keperluan pemrograman grfis.OpenGL bersifat Open-Source, multi-platform dan multi-language serta digunakan  mendefinisikan suatu objek, baik objek 2 dimensi maupun objek 3 dimensi. OpenGL juga merupakan suatu antarmuka pemrograman aplikasi (application programming interface (API) yang tidak tergantung pada piranti dan platform yang digunakan, sehingga OpenGL dapat berjalan pada sistem operasi Windows, UNIX dan sistem operasi lainnya.&lt;br /&gt;OpenGL pada awalnya didesain untuk digunakan pada bahasa pemrograman C/C++, namun dalam perkembangannya OpenGL dapat juga digunakan dalam bahasa pemrograman yang lain seperti Java, Tcl, Ada, Visual Basic, Delphi, maupun Fortran. Namun OpenGL di-package secara berbeda-beda sesuai dengan bahasa pemrograman yang digunakan. Oleh karena itu, package OpenGL tersebut dapat di-download pada situs http://www.opengl.org sesuai dengan bahasa pemrograman yang akan digunakan.&lt;br /&gt;&lt;br /&gt;Opengl melayani dua tujuan :&lt;br /&gt;Untuk menyembunyikan kompleksitas dari interfacing dengan berbagai 3D accelerators, memamerkan oleh programmer dengan satu, seragam API.&lt;br /&gt;Untuk menyembunyikan kemampuan yang berbeda dari hardware platform, oleh semua yang memerlukan mendukung implementasi penuh fitur opengl set (menggunakan software emulation jika diperlukan).&lt;br /&gt;1.1.Evolusi OpenGL&lt;br /&gt;&lt;br /&gt; Pendahulu openGL adalah IRIS GL dari Silicon Grapics.Padamulanya adalah library grafis 2D,yang berefolusi menjasi API program 3D untuk workstation canggih milik perusahaan tersebut.&lt;br /&gt; OpenGL adalah hasil dari usaha SGI untuk mengembangkan dan meningkatkan kemampuan portable IRIS.API grafis yang baru akan menawarkan kemampuan IRIS GL tetapi dengan standar yang lebih terbuka,dengan input dari pembuatan hardware lain  dan sistem operasi lain,dan akn memudahkan adaptasi ke hardware platform dan sistem operasi lain.&lt;br /&gt; Untuk lebih mempopulerkan openGL SGI mengijinkan pihak lain untuk mengembangkan standart openGL,dan beberapa vendor menyambut hal tersebut dengan membentuk OpenGL Architecture Review Board (ARB) Pendiri openGL adalah SGI,Digital Equepment Corporation,IBM,Intel dan Microsoft,pada tanggal 1 juli 1992 OpenGL versi 1.0 diperkenalkan.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Letak openGL dalam aplikasi gambar di atas pada umumnya ketika aplikasi berjalan program tersebut memanggil banyak fungsi,beberapa yang dibuat oleh programer dan beberapa yang disediakan oleh sistem operasi bahasa pemrograman.Aplikasi windows membuat output pada layar biasanya dengan memanggil sebual API windows yang disebut Graphics Devise Interfase,yang memungkinkan sebagai penulisan teks pada sebuah windows,menggambar garis 2D sederhana dan lainnya.Implementasi dari openGL mengambil permintaan grafis dari aplikasi dan membangun sebuah gambar berwarna dari grafis 3D,kemudian memberikan gambar tersebut ke GDI untuk ditampilkan pada layar monitor.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1.2.Cara kerja openGL&lt;br /&gt;&lt;br /&gt; OpenGL lebih mengarah pada prosedural daripada sebuah deskriptif API grafis.Untuk mendeskripsikan scene dan bagaimana penampilannya,sebenarnya programer lebih tau untuk menentukan hal-hal yang dibutuhkan untuk menghasilkan efek yang di inginkan.Langkah tersebut termasuk memanggil banyak perintah openGL,perintah tersebut digunakan untuk menggambarkan grafis primitif seperti titik,garis dan poligon dalam tiga dimensi.Sebagai tambahan,openGL mendukung lighting,shading,texture mapping,blending,transparancy,dan banyak kemampuan efek khusus lainnya.&lt;br /&gt;&lt;br /&gt; OpenGL mempunyai bnayak fungsi dan  penggunaan perintah yang sangat luas, penggunaan openGL membutuhkan library tambahan yang harus di letakkan pada direktory system dari windows (OS),yaitu :&lt;br /&gt;OpenGL32.dll&lt;br /&gt;Glu32.dll&lt;br /&gt;Glut32.dll&lt;br /&gt;&lt;br /&gt;   1.2.1.Inisialisasi awal&lt;br /&gt; Inti dari tahapan  ini adalah mengatur view port dan persepektif untuk penampilan&lt;br /&gt;   obyek ke dalam  layar  monitor,viewport adalah besarnya layar  monitor(image) yang dipakai&lt;br /&gt;   untuk menampilkanobyek,sedangkan persepektif yang dimaksud adalah pengaturan sumbu z&lt;br /&gt;   dalam penampilan obyek 3 dimensi,sehingga user dapat melihat obyek seolah-olah dalam&lt;br /&gt;   bidang  3 dimensi (X-Y-Z),selain itu penggambaran obyek yang dilakukan oleh programer&lt;br /&gt;   juga dapat menggunaan koordinat 3 dimensi.&lt;br /&gt; Selain ke dua tujuan di atas pada tahap ini juga dilakukan  koneksi awal dengan library&lt;br /&gt;   openGL, koneksi ini dilakukan supaya fungsi-fungsi yang di sediakan openGL dapat&lt;br /&gt;   digunakan.Funsi/prosedur yang digunakan :&lt;br /&gt;LoadGlut(‘glut32.dll) - pemanggilan library openGL&lt;br /&gt;InitGL – inisialisasi openGL awal yang harus dilakukan&lt;br /&gt;glViewport – untuk pengaturan viewport&lt;br /&gt;glMatrixMode – pengaturan viewport&lt;br /&gt;gluPerspective – pengaturan persepektif&lt;br /&gt;&lt;br /&gt;   Contoh script untuk inisialisasi openGL :&lt;br /&gt;   Try&lt;br /&gt;     LoadGlut(‘glut32.dll’);&lt;br /&gt;     InitGL;&lt;br /&gt;   Exept on  e := exeption do&lt;br /&gt;   Begin&lt;br /&gt;      messageDlg{e.message,mtError,[mbOk],};&lt;br /&gt;      Halt {1};&lt;br /&gt;    End;&lt;br /&gt;   End;&lt;br /&gt; Script di atas merupakan script yang paling sederhana, dalam artian minimal diperlukan&lt;br /&gt;   untuk menginisialisasi penggunaan  openGL.Fungsi-fungsi lain seperti yang disebut diatas&lt;br /&gt;   seperti glViewport,glMatrixMode,dapat di tambah kan pada script sesuai dengan kebutuhan.&lt;br /&gt;&lt;br /&gt;  1.2.2.Pembuatan gambar&lt;br /&gt;&lt;br /&gt; Didalam openGL pembuatan obyek dilakukan dengan titik-titik 3 dimensi,dengan&lt;br /&gt;   mode GL_QUARDS, maka otomatis setiap 4 titik digambar menjadi sebuah bidang segi&lt;br /&gt;   empat,sedangkan mode GL_LINES, pada setiap 2 titik digambar manjadi sebuah garis.Di&lt;br /&gt;   dalam tahap ini setiap garis atau bidang juga dapat di atur warnanya.&lt;br /&gt;   Funsi atau prosedur yang digunakan :&lt;br /&gt;mode GL_QUARDS – menggambarkan segi empat&lt;br /&gt;mode GL_LINES – menggambark garis&lt;br /&gt;glVertex3f- penentuan titik 3 dimensi&lt;br /&gt;glColor3f – penentuan warna&lt;br /&gt;&lt;br /&gt; Berikut ini akan diberikan contoh script sederhana (tidak utuh,hanya sepengggaalan)&lt;br /&gt;   beserta output yang dihasilkan,untuk menunjukkan proses pembuatan gambar atau obyek&lt;br /&gt;   pada delphi,dengan library tambahan open GL.&lt;br /&gt;&lt;br /&gt;   Contoh pembuatan titik 3 warna :&lt;br /&gt; glClearColor(1,1,1,0);  //warna dasar ;1,1,1,0 adalah putih&lt;br /&gt; glBegin(GL_POINTS); //untuk membuat titik&lt;br /&gt; glColor3f(1,0,0); //penentuan warna titik 1 dan posisinya&lt;br /&gt; glVertex3f(-0.1,-0.1,0.1);&lt;br /&gt; glColor3f(0,1,0); //penentuan warna titik 2 dan posisisya&lt;br /&gt; glVertex3f(0.1,-0.1,0.1);&lt;br /&gt; glColor3f(0,0,1); //penentuan titik 3 dan posisinya&lt;br /&gt; glColor3f(0,0.1,-0.1);&lt;br /&gt; glEnd;&lt;br /&gt;&lt;br /&gt;   Contoh pembuatan garis :&lt;br /&gt; glClearColor(1,1,1,0);  // warna background putih&lt;br /&gt; glColor3f(0,0,0); // warna garis hitam&lt;br /&gt; glBegin(GL_LINES); //digunakan untuk membua garis tiap 2 titik yang ada&lt;br /&gt; glVertex3f(0,0,-0.1); //garis 1&lt;br /&gt; glVertex3f(0.3,0.2,0.1);&lt;br /&gt; glVertex3f(0.1,-0.1,-0.2); // garis 2&lt;br /&gt; glVertex3f(0.3,-0.2,0.1);&lt;br /&gt; glEnd;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   Contoh pembuatan bidang segi empat :&lt;br /&gt; glClearColor(1,1,1,0);  // warna background putih&lt;br /&gt; glBegin(GL_QUARDS); //untuk membuat segi empat dalam  tiap4 titik&lt;br /&gt; glColor3f(1,0,0);   //posisi titik 1 dengan gradiasi warnanya&lt;br /&gt; glVertex3f(-0.2,0.2,0.2);&lt;br /&gt; glColor3f(1,0,0);   //posisi titik 2 dengan gradiasi warnanya&lt;br /&gt; glVertex3f(0.2,0.2,0.2);&lt;br /&gt; glColor3f(1,0,1);   //posisi titik 3 dengan gradiasi warnanya&lt;br /&gt; glVertex3f(0.2,-0.2,0.2);&lt;br /&gt; glColor3f(0,1,1);   //posisi titik 4 dengan gradiasi warnanya&lt;br /&gt; glVertex3f(-0.2,-0.2,0.2);&lt;br /&gt; glEnd;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Contoh gambar 3D menggunaan openGL pada delphi :&lt;br /&gt;&lt;br /&gt;program BasicDelphi;&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;Windows,Messages,OpenGL;&lt;br /&gt;&lt;br /&gt;var&lt;br /&gt;HGLRC_VarG : HGLRC;&lt;br /&gt;HDC_VarG : HDC;&lt;br /&gt;HWND_VarG : HWND;&lt;br /&gt;&lt;br /&gt;keys : array [0..255] of bool;&lt;br /&gt;SudutPutar : single = 0.0;&lt;br /&gt;&lt;br /&gt;//set ukuran window OpenGL&lt;br /&gt;LebarW : integer = 350;&lt;br /&gt;TinggiW : integer = 350;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function WindowProc(HWND_P : HWND; MESSAGE_P : UINT; WPARAM_P :&lt;br /&gt;                     WPARAM; LPARAM_P : LPARAM) : LRESULT; stdcall;&lt;br /&gt;begin&lt;br /&gt;case MESSAGE_P of&lt;br /&gt; WM_KEYUP:&lt;br /&gt;   begin&lt;br /&gt;     keys[WPARAM_P] := false;&lt;br /&gt;     result:=0;&lt;br /&gt;   end;&lt;br /&gt;&lt;br /&gt; WM_KEYDOWN:&lt;br /&gt;   begin&lt;br /&gt;     keys[WPARAM_P] := true;&lt;br /&gt;     result:=0;&lt;br /&gt;   end;&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;Result := DefWindowProc(HWND_P, MESSAGE_P, WPARAM_P, LPARAM_P);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure CloseOpenGL;&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;if HGLRC_VarG &lt;&gt; 0 then&lt;br /&gt;begin&lt;br /&gt; wglMakeCurrent(HDC_VarG, 0);&lt;br /&gt; wglDeleteContext(HGLRC_VarG);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;releaseDC(HWND_VarG, HDC_VarG);&lt;br /&gt;destroywindow(HWND_VarG);&lt;br /&gt;UnregisterClass('OpenGl3DwithDelphi',hInstance);&lt;br /&gt;&lt;br /&gt;HGLRC_VarG := 0;&lt;br /&gt;HDC_VarG := 0;&lt;br /&gt;HWND_VarG := 0;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function CreateOpenGL(HINST_P : HINST) : boolean stdcall;&lt;br /&gt;var&lt;br /&gt;iPixelFormat : integer;&lt;br /&gt;WCLASSEX : WNDCLASSEX;&lt;br /&gt;pfd : PIXELFORMATDESCRIPTOR;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;WCLASSEX.cbSize := Sizeof(WCLASSEX);&lt;br /&gt;WCLASSEX.style := CS_HREDRAW or CS_VREDRAW;&lt;br /&gt;WCLASSEX.lpfnWndProc := @WindowProc;&lt;br /&gt;WCLASSEX.cbClsExtra := 0;&lt;br /&gt;WCLASSEX.cbWndExtra := 0;&lt;br /&gt;WCLASSEX.hInstance := HINST_P;&lt;br /&gt;WCLASSEX.hIcon := LoadIcon(0, IDI_WINLOGO);&lt;br /&gt;WCLASSEX.hCursor := LoadCursor(0,IDC_WAIT);&lt;br /&gt;WCLASSEX.hbrBackground := 0;&lt;br /&gt;WCLASSEX.lpszMenuName := nil;&lt;br /&gt;WCLASSEX.lpszClassName:= 'OpenGl3DwithDelphi';&lt;br /&gt;&lt;br /&gt;if  RegisterClassEX(WCLASSEX) = 0 then&lt;br /&gt;begin&lt;br /&gt; MessageBox(0, 'Registrasi Window Class gagal, program dihentikan', 'Error window', MB_OK or MB_ICONERROR);&lt;br /&gt; Result := false;&lt;br /&gt; exit;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;HWND_VarG := CreateWindowEx(0,'OpenGl3DwithDelphi',&lt;br /&gt;       'Gambar 3D(Tekan Esc untuk keluar)',0,0,0,LebarW, TinggiW,0, 0, HINST_P, nil);&lt;br /&gt;&lt;br /&gt;if HWND_VarG = 0 then&lt;br /&gt;begin&lt;br /&gt; MessageBox(0, 'Pembuatan OpenGL window gagal, program dihentikan', 'Error window',MB_OK or MB_ICONERROR);&lt;br /&gt; Result:=false;&lt;br /&gt; exit;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;pfd.nSize := SizeOf(PIXELFORMATDESCRIPTOR);&lt;br /&gt;pfd.nVersion := 1;&lt;br /&gt;pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;&lt;br /&gt;pfd.iPixelType := PFD_TYPE_RGBA;&lt;br /&gt;pfd.cColorBits := 16;&lt;br /&gt;pfd.cRedBits := 0;&lt;br /&gt;pfd.cRedShift := 0;&lt;br /&gt;pfd.cGreenBits := 0;&lt;br /&gt;pfd.cBlueBits := 0;&lt;br /&gt;pfd.cBlueShift := 0;&lt;br /&gt;pfd.cAlphaBits := 0;&lt;br /&gt;pfd.cAlphaShift := 0;&lt;br /&gt;pfd.cAccumBits := 0;&lt;br /&gt;pfd.cAccumRedBits := 0;&lt;br /&gt;pfd.cAccumGreenBits := 0;&lt;br /&gt;pfd.cAccumBlueBits := 0;&lt;br /&gt;pfd.cAccumAlphaBits := 0;&lt;br /&gt;pfd.cDepthBits := 16;&lt;br /&gt;pfd.cStencilBits := 0;&lt;br /&gt;pfd.cAuxBuffers := 0;&lt;br /&gt;pfd.iLayerType := PFD_MAIN_PLANE;&lt;br /&gt;pfd.bReserved := 0;&lt;br /&gt;pfd.dwLayerMask := 0;&lt;br /&gt;pfd.dwVisibleMask := 0;&lt;br /&gt;pfd.dwDamageMask := 0;&lt;br /&gt;&lt;br /&gt;HDC_VarG := GetDC(HWND_VarG);&lt;br /&gt;if HDC_VarG = 0 then&lt;br /&gt;begin&lt;br /&gt; MessageBox(0, 'Pembuatan Device Context gagal, program dihentikan', 'Error device',MB_OK or MB_ICONERROR);&lt;br /&gt; Result := false;&lt;br /&gt; exit;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;iPixelFormat := ChoosePixelFormat(HDC_VarG, @pfd);&lt;br /&gt;&lt;br /&gt;if iPixelFormat = 0 then&lt;br /&gt;begin&lt;br /&gt; MessageBox(0, 'Pencarian Pixel Format gagal, program dihentikan', 'Error pixel format',MB_OK or MB_ICONERROR);&lt;br /&gt; Result := false;&lt;br /&gt; exit;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;if (not SetPixelFormat(HDC_VarG, iPixelFormat, @pfd)) then&lt;br /&gt;begin&lt;br /&gt; MessageBox(0, 'Set Pixel Format gagal, program dihentikan', 'Error pixel format',MB_OK or MB_ICONERROR);&lt;br /&gt; Result:=false;&lt;br /&gt; exit;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;HGLRC_VarG := wglCreateContext(HDC_VarG);&lt;br /&gt;if HGLRC_VarG = 0 then&lt;br /&gt;begin&lt;br /&gt; MessageBox(0, 'Pembuatan Rendering Context gagal, program dihentikan', 'Error rendering context',MB_OK or MB_ICONERROR);&lt;br /&gt; Result := false;&lt;br /&gt; exit;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;if (not wglMakeCurrent(HDC_VarG, HGLRC_VarG)) then&lt;br /&gt;begin&lt;br /&gt; MessageBox(0, 'Pengaktifan Rendering Context gagal, program dihentikan', 'Error rendering context',MB_OK or MB_ICONERROR);&lt;br /&gt; Result := false;&lt;br /&gt; exit;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;ShowWindow(HWND_VarG, SW_SHOW);&lt;br /&gt;&lt;br /&gt;glViewport(0, 0, LebarW, TinggiW);&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glLoadIdentity();&lt;br /&gt;gluPerspective(45.0, LebarW / TinggiW, 1.0, 1000.0);&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;glLoadIdentity;&lt;br /&gt;&lt;br /&gt;Result := true;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure Display_Grafik;&lt;br /&gt;begin&lt;br /&gt;glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);&lt;br /&gt;glLoadIdentity();&lt;br /&gt;&lt;br /&gt;glTranslated(0.0, 0.0, -5.5);&lt;br /&gt;glRotated(SudutPutar, 1.0, 1.0, 1.0);&lt;br /&gt;&lt;br /&gt;//polygon depan&lt;br /&gt;glBegin(GL_LINE_LOOP);&lt;br /&gt;glVertex3d(-1.0, -1.0,  1.0);&lt;br /&gt;   glVertex3d( 1.0, -1.0,  1.0);&lt;br /&gt;   glVertex3d( 1.0,  1.0,  1.0);&lt;br /&gt;   glVertex3d(-1.0,  1.0,  1.0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;//polygon belakang&lt;br /&gt;glBegin(GL_LINE_LOOP);&lt;br /&gt;   glVertex3d(-1.0, -1.0, -1.0);&lt;br /&gt;   glVertex3d( 1.0, -1.0, -1.0);&lt;br /&gt;   glVertex3d( 1.0,  1.0, -1.0);&lt;br /&gt;   glVertex3d(-1.0,  1.0, -1.0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;//polygon kanan&lt;br /&gt;glBegin(GL_LINE_LOOP);&lt;br /&gt;   glVertex3d( 1.0, -1.0,  1.0);&lt;br /&gt;   glVertex3d( 1.0, -1.0, -1.0);&lt;br /&gt;   glVertex3d( 1.0,  1.0, -1.0);&lt;br /&gt;   glVertex3d( 1.0,  1.0,  1.0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;//polygon kiri&lt;br /&gt;glBegin(GL_LINE_LOOP);&lt;br /&gt;   glVertex3d(-1.0, -1.0,  1.0);&lt;br /&gt;   glVertex3d(-1.0, -1.0, -1.0);&lt;br /&gt;   glVertex3d(-1.0,  1.0, -1.0);&lt;br /&gt;   glVertex3d(-1.0,  1.0,  1.0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;//polygon atas&lt;br /&gt;glBegin(GL_LINE_LOOP);&lt;br /&gt;   glVertex3d(-1.0,  1.0,  1.0);&lt;br /&gt;   glVertex3d( 1.0,  1.0,  1.0);&lt;br /&gt;   glVertex3d( 1.0,  1.0, -1.0);&lt;br /&gt;   glVertex3d(-1.0,  1.0, -1.0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;//polygon bawah&lt;br /&gt;glBegin(GL_LINE_LOOP);&lt;br /&gt;   glVertex3d(-1.0, -1.0,  1.0);&lt;br /&gt;   glVertex3d( 1.0, -1.0,  1.0);&lt;br /&gt;   glVertex3d( 1.0, -1.0, -1.0);&lt;br /&gt;   glVertex3d(-1.0, -1.0, -1.0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;SudutPutar := SudutPutar + 0.1;&lt;br /&gt;&lt;br /&gt;SwapBuffers(HDC_VarG);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function WinMain(hInstance: HINST; hPrevInstance: HINST; lpCmdLine: PChar;&lt;br /&gt;                   nCmdShow: integer): integer; stdcall;&lt;br /&gt;var&lt;br /&gt;msg : TMSG;&lt;br /&gt;Selesai : Bool;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;Selesai := false;&lt;br /&gt;&lt;br /&gt;if not CreateOpenGL(hInstance) then&lt;br /&gt;begin&lt;br /&gt; CloseOpenGL;&lt;br /&gt; Result := 0;&lt;br /&gt; exit;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;glEnable(GL_DEPTH_TEST);&lt;br /&gt;glClearColor(0.0, 0.5, 5.0, 0.5);&lt;br /&gt;&lt;br /&gt;while not Selesai do&lt;br /&gt;begin&lt;br /&gt; PeekMessage(msg, 0, 0, 0, PM_REMOVE);&lt;br /&gt;&lt;br /&gt; if msg.message &lt;&gt; WM_QUIT then&lt;br /&gt; begin&lt;br /&gt;   Display_Grafik;&lt;br /&gt;&lt;br /&gt;   if keys[VK_ESCAPE] then&lt;br /&gt;     Selesai := true;&lt;br /&gt;&lt;br /&gt;   TranslateMessage(msg);&lt;br /&gt;   DispatchMessage(msg);&lt;br /&gt; end&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;CloseOpenGL;&lt;br /&gt;result := msg.wParam;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;WinMain(hInstance, hPrevInst, CmdLine, CmdShow);&lt;br /&gt;end.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Selain OpenGL ada juga tools/library grafik yang dapat dipergunakan yaitu DirectX. Namun tools ini hanya dapat dipergunakan pada Microsoft Windows.&lt;br /&gt;Masing-masing perintah atau fungsi dalam OpenGL mempunyai struktur dan format yang sama.&lt;br /&gt;&lt;br /&gt;Perintah dan Arti Keterangan pada openGL&lt;br /&gt;glVertex2i(x,y); Lokasi titik berada di (x,y) Tipe argumennya adalah integer dan 2 dimensi yaitu x dan y&lt;br /&gt;glVertex2f(x,y); Lokasi titik berada di (x,y) Tipe argumennya adalah float dan 2 dimensi yaitu x dan y&lt;br /&gt;glVertex3i(x,y,z); Lokasi titik berada di (x,y,z) Tipe argumennya adalah integer dan 2 dimensi yaitu x, y dan z&lt;br /&gt;glVertex3f(x,y,z); Lokasi titik berada di (x,y,z) Tipe argumennya adalah float dan 2 dimensi yaitu x, y dan z&lt;br /&gt;glClearColour(R, G, B, ?); Warna latar belakang Empat komponen warna yaitu Red, Green, Blue dan alpha&lt;br /&gt;glColor3f(R, G, B); Warna latar muka (pena) Tiga komponen warna yaitu Red, Green dan Blue&lt;br /&gt;glColor4f(R, G, B); Warna latar muka (pena) Empat komponen warna yaitu Red, Green, Blue dan alpha&lt;br /&gt;glPointSize(k); Ukuran titik k piksel Besar kecilnya ukuran titik tergantung pada k (integer)&lt;br /&gt;glBegin(GL_POINTS); Titik Objek primitive (lihat gambar 2.2)&lt;br /&gt;glBegin(GL_LINES); Garis Objek primitive (lihat gambar 2.2)&lt;br /&gt;glBegin(GL_LINE_STRIP); Poligaris Objek primitive (lihat gambar 2.2)&lt;br /&gt;glBegin(GL_LINE_LOOP); Poligaris tertutup (polygon) Objek primitive (lihat gambar 2.2)&lt;br /&gt;glBegin(GL_TRIANGLES); Segitiga Objek primitive (lihat gambar 2.2)&lt;br /&gt;glBegin(GL_TRIANGLE_STRIP); Segitiga Objek primitive (lihat gambar 2.2)&lt;br /&gt;glBegin(GL_TRIANGLE_FAN); Segitiga Objek primitive (lihat gambar 2.2)&lt;br /&gt;glBegin(GL_QUADS); Segiempat Objek primitive (lihat gambar 2.2)&lt;br /&gt;glBegin(GL_QUAD_STRIP); Segiempat Objek primitive (lihat gambar 2.2)&lt;br /&gt;glBegin(GL_POLYGON); Poligon Objek primitive (lihat gambar 2.2)&lt;br /&gt;glBegin(GL_LINE_STIPPLE); Garis putus-putus Objek primitive&lt;br /&gt;glBegin(GL_POLY_STIPPLE); Poligon dengan pola tertentu Objek primitive&lt;br /&gt;glRect(GLint x1, GLint y1, GLint x2, GLint y2); Segiempat siku-siku Objek primitive dan ukuran segiempat ditentukan oleh dua titik yaitu (x1,y1) dan (x2,y2)&lt;br /&gt;glEnd( ); Akhir perintah OpenGL -&lt;br /&gt;&lt;br /&gt;Perintah tranformasi pada OpenGL adalah&lt;br /&gt;Translasi – glTranslated&lt;br /&gt;Skala – glScaled&lt;br /&gt;Putar atau rotasi – glRotated&lt;br /&gt;&lt;br /&gt;The OpenGL Utility Toolkit (GLUT)&lt;br /&gt;GLUT dapat menyederhanakan implementasi program dengan menggunakan OpenGL. GLUT didesain secara serdehana untuk merender sebuah program yang dibuat dengan OpenGL. Versi GLUT yang ada pada saat ini adalah 3.7.6. GLUT juga mendukung fungsi-fungsi, antara lain:&lt;br /&gt;o Mutiplewindows dalam render window OpenGL.&lt;br /&gt;o Memproses kejadian Callback.&lt;br /&gt;o Dapat menerima reaksi dari input (antara lain mouse dan keyboard).&lt;br /&gt;o Mempermudah cascading fasilitas menu pop-up.&lt;br /&gt;o Mendukung bitmap dan stroke fonts.&lt;br /&gt;o Manajemen windows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Langkah-langkah menggunakan OpenGL&lt;br /&gt;Membuat aplikasi baru&lt;br /&gt;Pilih menu (File &gt; New &gt; Application). akan tampil form kosong.&lt;br /&gt;Tampilkan code editor (F12)&lt;br /&gt;Tambahkan OpenGL pada klausa uses&lt;br /&gt;uses&lt;br /&gt;Windows, Messages,...,OpenGL;&lt;br /&gt;Tambahkan variabel berikut pada properti form.&lt;br /&gt;{ Private declarations }&lt;br /&gt;fdc : HDC;&lt;br /&gt;FRC : HGLRC;&lt;br /&gt;procedure IdleLoop(Sender : TObject; Var Done : boolean);&lt;br /&gt;Tekan Shift+Ctrl+C agar implementasi prosedur IdleLoop dibuat secara otomatis oleh IDE.&lt;br /&gt;procedure TForm1.IdleLoop(Sender:TObject; Var Done: boolean);&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;Tambahkan event Handler OnCreate pada form (klik dua kali pada form)&lt;br /&gt;procedure TForm1.FormCreate(Sender : TObject);&lt;br /&gt;var&lt;br /&gt;pfd : TPixelForamatDescriptor;&lt;br /&gt;pixelformat : integer;&lt;br /&gt;begin&lt;br /&gt;{ TAHAP I : Buat Window OpenGL }&lt;br /&gt;FDC := GetDC( Panel1.Handle ); //window openGL akan ditampilkan di panel&lt;br /&gt;FillChar(pfd, sizeof(pfd), 0);&lt;br /&gt;pfd.nSize := sizeof(pfd);&lt;br /&gt;pfd.nVersion := 1;&lt;br /&gt;pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or&lt;br /&gt;PFD_DOUBLEBUFFER;&lt;br /&gt;pfd.iPixelType := PFD_TYPE_RGBA;&lt;br /&gt;pfd.cColorBits := 16;&lt;br /&gt;&lt;br /&gt;{$WARNINGS OFF} //biar nggak muncul warning karena penggunaan operator '@'&lt;br /&gt;pf := ChoosePixelFormat(FDC, @pfd);&lt;br /&gt;SetPixelFormat(FDC, pf, @pfd);&lt;br /&gt;{$WARNINGS ON} //kembalikan ke normal&lt;br /&gt;&lt;br /&gt;FRC := wglCreateContext(FDC);&lt;br /&gt;wglMakeCurrent(FDC, FRC);&lt;br /&gt;&lt;br /&gt;{ TAHAP II : Inisialisasi variabel openGL }&lt;br /&gt;glSetViewport( 0, 0, Panel1.Width, Panel1.Height ); //&lt;br /&gt;glClearColor( 0, 0, 0, 1.0 ); // r:0 g:0 b:0 = hitam&lt;br /&gt;&lt;br /&gt;glMatrixMode( GL_PROJECTION );&lt;br /&gt;glLoadIdentity;&lt;br /&gt;gluPerspective( 45, Panel1.Width/Panel1.Height, 1, 500);//FoV, Aspect&lt;br /&gt;Ratio, Near Clip, Far Clip&lt;br /&gt;glMatrixMode( GL_MODELVIEW );&lt;br /&gt;glLoadIdentity;&lt;br /&gt;{ Set Kamera }&lt;br /&gt;gluLookAt( 0, 0, -4, 0, 0, 0, 0, 1, 0 );// posisi.x, posisi.y, posisi.z,&lt;br /&gt;lookat.x, lookat.y, lookat.z, up.x, up.y, up.z&lt;br /&gt;&lt;br /&gt;Application.OnIdle := IdleLoop;&lt;br /&gt;end;&lt;br /&gt;Sekarang waktunya mengisi body prosedur IdleLoop&lt;br /&gt;procedure TForm1.IdleLoop(Sender : TObject; Var Done : Boolean);&lt;br /&gt;begin&lt;br /&gt; glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );&lt;br /&gt;&lt;br /&gt; //prosedur penggambaran&lt;br /&gt; glPushMatrix;&lt;br /&gt; glColor( 0, 0.5, 0, 1); //warna ijo&lt;br /&gt; glBegin(GL_QUADS); //gambar kotak (warna ijo)&lt;br /&gt; glVertex3f( -0.5, -0.5, -0,5 );&lt;br /&gt; glVertex3f( 0.5, -0.5, -0,5 );&lt;br /&gt; glVertex3f( 0.5, 0.5, -0,5 );&lt;br /&gt; glVertex3f( -0.5, 0.5, -0,5 );&lt;br /&gt; glEnd;&lt;br /&gt; glPopMatrix;&lt;br /&gt;glFlush;&lt;br /&gt;SwapBuffers(DC); //update hasil penggambaran ke layar&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Downloads:&lt;br /&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/Pengenalan_openGL.zip"&gt;Pengenalan OpenGL.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/OpenGL.zip"&gt;OpenGl.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/takrip_the_slayer/Balok3dopenGL.zip"&gt;Balok3dOpenGL.zip&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7903546118810218715-7808828467810823782?l=redtakrip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redtakrip.blogspot.com/feeds/7808828467810823782/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://redtakrip.blogspot.com/2009/02/fedr.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7903546118810218715/posts/default/7808828467810823782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7903546118810218715/posts/default/7808828467810823782'/><link rel='alternate' type='text/html' href='http://redtakrip.blogspot.com/2009/02/fedr.html' title='OpenGL'/><author><name>T@krip!</name><uri>http://www.blogger.com/profile/05171962652471735949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7903546118810218715.post-8208837687020321214</id><published>2009-01-24T10:05:00.000-08:00</published><updated>2009-02-02T03:09:30.666-08:00</updated><title type='text'>Blog! buat tugas Kampus.</title><content type='html'>Tugas-tugas kampus emang begitu banyak, nah di blogger nie yang tugas Pemrograman Grafik dosen Pak Yoyok.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7903546118810218715-8208837687020321214?l=redtakrip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7903546118810218715/posts/default/8208837687020321214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7903546118810218715/posts/default/8208837687020321214'/><link rel='alternate' type='text/html' href='http://redtakrip.blogspot.com/2009/01/jah-ngisi-paan-yak.html' title='Blog! buat tugas Kampus.'/><author><name>T@krip!</name><uri>http://www.blogger.com/profile/05171962652471735949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
