KIRPMA (Clipping) Bir grafik veri tabanından bir parçayı çıkarma işlemi olan kırpma bilgisayar grafiğinin temel işlerinden birisidir. Kırpma algoritmaları.

Slides:



Advertisements
Benzer bir sunumlar
3/A SINIFI.
Advertisements

PERSPEKTİF Yukarıya doğru uzanan kenarlar YÜKSEKLİK kenarlarıdır.
Geometrik Dönüşümler.
KONU :GÖRÜNTÜNÜN GEOMETRİK MODELLERİNİN KURULMASI
PERSPEKTİF PERSPEKTİF (İZDÜŞÜM) :Cisimlerin yükseklik, genişlik ve derinlik boyutları ile ön, üst ve yan görünüşleri aynı anda birlikte görünecek şekilde.
2B Görüntüleme Işın İzleme Kırpma
Simetri ekseni (doğrusu)
BİR BASİT KESRİ SAYI DOĞRUSUNDA GÖSTERİRKEN
EĞİM EĞİM-1 :Bir dik üçgende dikey (dik) uzunluğun yatay uzunluğa oranına (bölümüne) eğim denir. Eğim “m” harfi ile gösterilir. [AB] doğrusu X ekseninin.
Oyun Programlama (Grafiklere Giriş)
Problemi Çözme Adımları
Prof. Dr. Halil İbrahim Karakaş Başkent Üniversitesi
ALGORİTMA ÖRNEKLERİ Programlamaya Giriş
TEMEL DİKKLİK KAVRAMI E d k O Düzlemde G F E n m d B p Uzayda.
Final Öncesi.
Final Öncesi.
Dr. Ahmet KÜÇÜKER Sakarya Üniversitesi Mühendislik Fakültesi
2. BÖLÜM VEKTÖR-KUVVET Nicelik Kavramı Skaler Nicelikler
Fortran PROGRAMLAMA DİLİ
Yapısal Program Geliştirme – if, if-else
KATI CİSİMLERİN ALAN VE HACİMLERİ
Geriden Kestirme Hesabı
Bilgisayar Grafikleri OPENGL
Bölüm 4: Sayısal İntegral
GEOMETRiK CiSiMLER.
2B Görüntüleme ve “Rasterization”
Merhaba arkadaşlar.
Yrd. Doç. Dr. Mustafa Akkol
Lineer Cebir Prof.Dr.Şaban EREN
DİKDÖRTGEN-KARE KONU ANLATIMI VE SORU ÇÖZÜMLERİ
NİVELMAN ÇEŞİTLERİ BOYUNA PROFİL NİVELMANI ENİNE PROFİL NİVELMANI
NİVELMAN ÇEŞİTLERİ PROFİL NİVELMANI.
DOĞRUSAL DENKLEMLERİN
GEOMETRİK CİSİMLER.
COSTUMES KILIKLAR (KOSTÜMLER)
DİK PRİZMALARIN ALAN ve HACİMLERİ
Algoritmalar ve Programlama I Ders 2: Akış Diyagramları
BİLGİSAYAR GRAFİĞİ Ders 5:PROJEKSİYONLAR
Veri Yapıları ve Algoritmalar
Bilgisayar Grafikleri Ders 2: Koordinat Sistemleri
Bilgisayar Grafikleri Ders 3: 2B Dönüşümler
TEMEL GEOMETRİK KAVRAMLAR VE ÇİZİMLER ÜÇGEN VE DÖRTGENLER
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BİLGİSAYAR GRAFİĞİ Ders 5:PROJEKSİYONLAR
Regresyon Analizi İki değişken arasında önemli bir ilişki bulunduğunda, değişkenlerden birisi belirli bir birim değiştiğinde, diğerinin nasıl bir değişim.
TEKNİK RESİM Perspektifler.
ÖRÜNTÜ VE SÜSLEMELER.
KIRPMA (Clipping) Bir grafik veri tabanından bir parçayı çıkarma işlemi olan kırpma bilgisayar grafiğinin temel işlerinden birisidir. Kırpma algoritmaları.
Bilgisayar Grafikleri Ders 5: 3B Homojen koordinat
PERSPEKTİF ÖMER ASKERDEN PİRİ MEHMET PAŞA ORTAOKULU
Doğrusal Programlama Linear Programming
PRİZMALAR VE PİRAMİTLER
Spring 2002Equilibrium of a Particle1 Bölüm 3- Parçacığın Dengesi.
Bölüm 4 – Kuvvet Sistem Bileşkeleri
O R T L G İ M A A Ve Akış şemaları.
PERSPEKTİF.
Autocad Nedir? Autocad, standartlara ve teknik resim kurallarına göre çizim yapabilen gelişmiş bir bilgisayar destekli tasarım programıdır
YER FOTOGRAMETRİSİ (2014) SUNU III Doç. Dr. Eminnur Ayhan
YER FOTOGRAMETRİSİ (2014) Doç. Dr. Eminnur Ayhan
AKIMDA KÜTLENİN KORUNUMU VE SÜREKLİLİK DENKLEMİ
ITEC186 Bilgi Teknolojilerine Giriş
PERSPEKTİF NEDİR ? Perspektif, doğadaki iki boyutlu ya da üç boyutlu cisimlerin bizden uzaklaştıkça küçülmüş ve renklerinin solmuş gibi görünmesine denir.
GÖRSEL SANATLAR DERSİ.
Çizgeler Çizge G=(V,E), ikilisine denir, burada V sonlu bir kümedir, E ise bu kümenin elemanları arasında ikili bir bağıntıdır. V kümesine G çizgesinin.
FOTOGRAMETRİ - I Sunu 5 Doç Dr. Eminnur Ayhan
X-IŞINLARI KRİSTALOGRAFİSİ
TEKNOLOJİ VE TASARIM DERSİ 7.B.2. Bilgisayar Destekli Tasarım.
Problemi Çözme Adımları
İSTATİSTİK II Hipotez Testleri 1.
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

KIRPMA (Clipping) Bir grafik veri tabanından bir parçayı çıkarma işlemi olan kırpma bilgisayar grafiğinin temel işlerinden birisidir. Kırpma algoritmaları iki ya da üç boyutlu, düzgün ya da düzgün olmayan bölge ya da hacimler için geliştirilmiştir. Bu algoritmalar donanım ya da yazılım olarak gerçeklenmektedir. Yazılım olarak gerçeklendiğinde gerçek zaman uygulaması için daha yavaş olacaktır. Bir nesne üzerinde kırpma algoritmalarının uygulanmasının başlıca nedenleri şunlardır: Ekran sınırları bellidir ve ekran dışına yapılacak çizimler sorunlara yol açabilir. Görüntülenen bir nesnenin ekranın diğer kısımlarında bulunan nesnelerin üzerine gelmesinin istenmediği durumlar olabilir. Görüntülenen nesne, ekran sınırlarında olmaya bilir veya çok az bir kısmı ekran sınırları içerisindedir. Kırpma işlemleri sonucunda, nesnenin görünmeyen kısımları için yapılması gereken işlemler es gecilir. Dolayısı ile çizim sırasında önemli hız artışları sağlanır.

Şekilde iki boyutlu bir sahne ve düzgün bir kırpma penceresi gösterilmiştir. Pencere sol (L), sağ(R), üst(T), alt (B) köşeleri ile tanımlanmaktadır. Düzgün bir kırpma penceresi dikdörtgendir ve ekran ya da obje uzayı ile kenarları paraleldir. Kırpma algoritmasının amacı hangi nokta, çizgi, çizgi parçasının kırpma penceresi içinde kaldığını belirler. Kırpma penceresi içinde kalan noktalar, çizgiler ve çizgi parçaları gösterilecek, diğerleri kırpılıp atılacaktır. Bir resim ya da sahne için çok sayıda çizgi ve noktaların kırpılması söz konusu olduğu için algoritmanın verimliliği büyük önem taşımaktadır. Çoğu durumda bir çok nokta ( q gibi ) ve çizgi (i j gibi) kırpma perceresi dışında ya da P noktası, ab doğrusu gibi pencere içinde olacaktır. Bu nedenle bu türlerin çabucak kabul veya ret kararlarının verilebilmesi önemlidir.

Nokta Kırpma Doğru Kırpma İse nokta kırpma alanı içerisindedir. Pencere sınırı dahil olarak kabul edilmiştir. Doğru Kırpma Çizgiler için baktığımızda, eğer çizginin her iki uç noktasında pencere içinde ise çizgi görülebilir. Şekilde ab çizgisi gibi. Ancak tersi geçerli değildir. Çizginin her iki uç noktası pencere dışında ise bu durumda çizgi ya pencere dışında (ij) ya da pencereyi kesmektedir (gh). Basit bir görebilirlik algoritması; { (xa, ya) ve (xb, yb) çizginin uç noktalarıdır. } { xL, yT ,xR, yB pencere köşe koordinatlarıdır. }  

{ Eğer her iki noktanın herhangi bir koordinatı pencere dışında ise çizgi tam görülebilir değildir.}  başla if xa < xL or xa > xR then 1 if xb < xL or xb > xR then 1 if ya < yB or ya > yT then 1 if yb < yB or yb > yT then 1 { çizgi tam görülebilir.} çizgiyi çiz goto 3 { Tam olarak görülmeyen çizgi olup olmadığını sına } 1 if xa < xL or xb < xR then 2 if xa > xL or xb > xR then 2 if ya > yT or yb > yT then 2 if ya < yB or yb < yB then 2 { Çizgi kısmi görülebilirdir ya da pencereyi kesmektedir.} { Kesim noktalarını hesapla } 2 çizgi görülemezdir. 3 sonraki çizgiyi ele al , başa dön

Doğru kırpma işleminden sonra, kırpma penceresinin dışında birden fazla parça kalabilmektedir. Ancak kırpma penceresinin içerisinde sadece bir doğru parçası bulunabilir. Bir doğruyu kıpmak için kırpma işleminden sonra, elde edilecek doğru parçasının iki bitim noktasının hesaplanması yeterlidir. Doğru kırpma yöntemlerinin en belirgin özelliği, doğruyu kırpmadan önce bazı ön testler yaparak kesişim hesaplamalarını azaltmak ve algoritmayı mümkün olduğunca hızlandırmaktır.

Dan Cohen ve Ivan Sutherland Doğru Kırpma Algoritması Görülebilirlik ya da görülemezlik testinin hangisinin önce yapıldığı önemsizdir. Ancak kesim noktası hesabı pahalıdır ve sonra yapılmalıdır. Dan Cohen ve Ivan Sutherland’ ın bu testler için geliştirdikleri bir teknikle, dört bitlik bir kod kullanılmıştır. Bu kodlama kullanılarak uç noktalarının 9 bölgeden hangisinde olduğu gösterilmektedir. Bölge kodları şekilde gösterilmektedir. En sağ bit ilk bir olmak izere bu dört bitin anlamı şöyle; Her çizginin her iki uç noktasının kodu 0000 ise çizgi pencerenin içindedir ve çizgi görülebilir. Bunun dışındaki çizgiler için tam olarak görülemezlik testi için uç nokta koordinatlarına bit-bit and işlemi uygulanır.

Eğer sonuç 0000 değilse çizgi tam görülemezdir Eğer sonuç 0000 değilse çizgi tam görülemezdir. Şekildeki örnek çizgilerden bazıları için testi uygularsak; Çizgi Uç nokta kodları Lojik işlem Karar Ab 0000-0000 0000 Tam görülebilir ij sağ 0010-0110 0010 Tam görülemez ij sol üst 1001-1000 1000 Cd 0000-0010 Kısmen görülebilir Ef 0001-0000 Kl 1000-0010

procedure CohenSutherlandLineClipAndDraw( x0,y0,x1,y1,xmin,xmax,ymin,ymax : real ; value: integer); { Cohen-Sutherland clipping algorithm for line P0=(x1,y0) to P1=(x1,y1) and clip rectangle with diagonal from (xmin,ymin) to (xmax,ymax).} type edge = (LEFT,RIGHT,BOTTOM,TOP); outcode = set of edge; var accept,done : boolean; outcode0,outcode1,outcodeOut : outcode; {Outcodes for P0,P1, and whichever point lies outside the clip rectangle} x,y : real; procedure CompOutCode(x,y: real; var code:outcode); {Compute outcode for the point (x,y) } begin code := []; if y > ymax then code := [TOP] else if y < ymin then code := [BOTTOM]; if x > xmax then code := code +[RIGHT] else if x < xmin then code := code +[LEFT] end; accept := false; done := false; CompOutCode (x0,y0,outcode0); CompOutCode (x1,y1,outcode1); repeat if(outcode0=[]) and (outcode1=[]) then {Trivial accept and exit} begin accept := true; done:=true end else if (outcode0*outcode1) <> [] then done := true {Logical intersection is true, so trivial reject and exi t.}

else {Failed both tests, so calculate the line segment to clip; from an outside point to an intersection with clip edge.} begin {At least one endpoint is outside the clip rectangle; pick it.} if outcode0 <> [] then outcodeOut := outcode0 else outcodeOut := outcode1; {Now find intersection point; use formulas y=y0+slope*(x-x0),x=x0+(1/slope)*(y-y0).} if TOP in outcodeOut then begin {Divide line at top of clip rectangle} x := x0 + (x1 - x0) * (ymax - y0) / (y1 - y0); y := ymax end if BOTTOM in outcodeOut then begin {Divide line at bottom of clip rectangle} x := x0 + (x1 - x0) * (ymin - y0) / (y1 - y0); else if RIGHT in outcodeOut then begin {Divide line at right edge of clip rectangle} y := y0 + (y1 - y0) * (xmax - x0) / (x1 - x0); x := xmax else if LEFT in outcodeOut then begin {Divide line at left edge of clip rectangle} y := y0 + (y1 - y0) * (xmin - x0) / (x1 - x0); x := xmin end; {Now we move outside point to intersection point to clip, and get ready for next pass.}

if (outcodeOut = outcode0) then begin x0 := x; y0 := y; CompOutCode(x0,y0,outcode0) end else x1 := x; y1 := y; CompOutCode(x1,y1,outcode1); end {subdivide} until done; if accept then MidpointLineReal(x0,y0,x1,y1,value) {Version for real coordin ates} end; {CohenSutherlandLineClipAndDraw}

Dikkat edilirse lojik işlem sonucu sıfır olan farklı ise tam görülemez kararını verebiliyoruz. Ancak lojik işlem sonucu sıfır çıktığında, çizgi tam ya da kısmen görülebilir olduğu gibi tam görülemez (kl) de olabilmektedir. Bu durumda tam görülebilirlik için uç noktaların kodlarına da bakmak gerekir.   Eğer bit manipulasyonu mümkünse uç nokta kodlarını sınamak çok kolaydır. İki çizginin kesim noktası parametrik ya da parametrik olamayan gösterim kullanılarak hesaplanabilir. P1(x1 , y1 ), P2(x2, y2) noktalarından geçen çizgi;

3 Boyut Kırpma -Tıpkı iki boyutta olduğu gibi üç boyutta kırpma da ekranda görünmeyen kısımların kaldırılması için yapılır. - Bunun yapılmasının amacı hesaplama yükünün azaltılması içindir. 3D kırpma iki temel adımda gerçekleştirilmektedir: Görüntülenemeyen objeleri göz ardı et. Örneğin; kameranın arkasında kalan objeler, görüş alanının dışındaki objeler ya da çok uzakta olan objeler gibi Kırpma düzlemiyle kesişen objeleri keserek

Göz Ardı Etme - Görüş alanına girmeyen objeleri göz ardı etme işlemi kutu/küre gibi objelerin sınırlarının görüş alanının boyutlarıyla karşılaşmasıyla yapılır. - Projeksiyon işleminden önce ya da sonra yapılabilir.

Nesneleri Kırpma Kısmen görüş alanının içinde bulunan objelerin tıpkı iki boyutluda yapıldığı gibi kırpılması gerekir.

Kırpma Perspektif dönüşümü yapıldıktan sonra kesik koni görünümlü görüş alanı hacmi paralelyüz görünümüne dönüştürülür. Z derinlik bilgisi korunur.

Kırpma Dönüştürülmüş görüş alanı hacmi daha sonra (0,0,0) noktası etrafında normalize edilir ve z ekseni ters çevrilir.

Kırpma Projeksiyon dönüşümünü ve normalizasyon işlemi tamamlandıktan sonra kırpma işlemi uygulanabilir. Matris şu şekilde: Homojen koordinatlar için tüm kırpma işlemleri yapılır.

Kırpma 3 boyutta kırpma yapılırken 6 bitllik kod alanı kullanılır ve 27 farklı bölüm için alan kodu elde edilir. Bitler şekilde gösterildiği gibidir: bit 6 Uzak bit 5 Yakın bit 4 Üst bit 3 Alt bit 2 Sağ bit 1 Sol

Kırpma Normalize edilmiş kırpma hacmimize göre bölgeleri şu formüllerle test edebiliriz. a (xh, yh, zh, h) noktasının içerde olma durumu: Düzenleyecek olursak:

Bölümlerin Kodları

Doğru Kırpma Doğru kırpma işlemi için ilk önce uygun bölge kodlarını kullanarak uç noktalar belirlenir. Uç noktaları [000000] bölgesinde olan doğrular tüm hatlarıyla kabul edilir. Uç noktaları herhangi bir pozisyonda ortak bir biti paylaşıyorsa doğrunun tüm hatları reddedilebilir. - Tıpkı iki boyutta olduğu gibi bu doğrular görüş alanıyla kesişmemektedir.

Doğru Kırpma Örnek P3[010101] ve P4[100110] noktalarına sahip olan doğru reddedilir.

3 Boyutta Kırpma için Denklemler Üç boyutlu doğru bölümlerinin kırpma denklemleri parametrik şekliyle verilir. -Bitiş noktaları ile bir doğru bölümü için P1(x1h, y1h, z1h, h1) ve P2(x2h, y2h, z2h, h2) verilmiştir. -Doğru üzerindeki herhangi bir noktayı tanımlayan parametrik denklem:

3 Boyutta Kırpma için Denklemler Bir doğruya ait bu parametrik denklemden yola çıkılarak homojen koordinatlar için şu denklemler elde edilir:

3 Boyut Kırpma Örneği Doğrunun noktaları P1[000010] ve P2[001001] Şeklinde verilsin. İkinci bit değerleri farklı olduğu için biliyoruz ki doğru sağ sınırı geçmektedir.

3 Boyut Kırpma Örneği Sağdaki sınır x = 1 olduğundan yola çıkarsak; Denklemden u ‘yu çektiğimizde şu şekilde olur: u ‘nun değerini hesapladıktan sonra benzer şekilde yp ve zp için de çözümleri bulunur. Sonrasında normal iki boyutlu doğru kırpma algoritması uygulanarak devam edilir.

Çokgen Kırpma Üç boyutlu kırpma için en yaygın olan durum çokgenlerden oluşan grafik objelerinin kırpılması işlemidir.

Çokgen Kırpma Çokgen kırpmada öncelikle sınırlayıcı hacmi kullanarak tüm şekil ele alınır. Sonrasında Sutherland-Hodgman algoritması uygulanarak belirlenen çokgenler için kırpma işlemi uygulanır.

Sutherland-Hodgman algoritması Herbir köşe ardarda Girdi’ye eklenir (vertex çifti) Çıktı ise yeni köşelerin listesinden oluşur. Kırpmalar için kurallar şunlardır: Eğer birinci vertex dışarıda ikincisi içerdeyse çıktı kesişme noktası ve ikinci vertexdir. Eğer iki vertex de içerideyse çıktı ikincisidir. Eğer birincisi içeride ikincisi dışarıdaysa çıktı kesişme noktasıdır. Eğer ikisi de dışardaysa çıktı yoktur.

Sutherland-Hodgman algoritması Dış kısım iç kısım Dış kısım iç kısım Dış kısım iç kısım Dış kısım iç kısım v2 v2 v2 v2 v1’ v1’ v1 v1 v1 v1 İçeriden dışarıya : Çıktı: v1’ Dışarıdan içeriye: Çıktı: v1’ ve v2 İkisi de içeride: Çıktı: v2 İkisi de dışarıda: Çıktı: yok

Sutherland-Hodgman algoritması v2’ v2 v1’ v3’ Sol Kırpma Sağ Kırpma Alt Kırpma Üst Kırpma v1 v2” v1v2 v2 v2v2’ v2’ v2’v3’ v2”v1’ v1’ v2v3 v2’ v2’v3’ v3’ v3’v1 v1’v2 v2 v3v1 v3’v1 v3’v1 v1 v1v2 v1’v2 v2v2’ v2’ v1v2 v2 v2” v2v2’ v2’ v2’v2” Köşeler Çıktı Köşeler Çıktı Köşeler Çıktı Köşeler Çıktı

Sutherland-Hodgman algoritması Algoritma 3 boyuta uyarlandığında kırpma sınırları alt ve üst dahil edildiğinde 4 yerine 6 olmaktadır. Kesişmeler düzlemler için hesaplanır.

Sutherland-Hodgman algoritması Görüş alanı hacmi: Örneğin x = 1 sağdaki kırpma için dört durumun testi yapılır: x0  1 ve x1  1 tamamen içerde x0  1 ve x1 > 1 dışarı çıkıyor x0 > 1 ve x1  1 içeri giriyor x0 > 1 ve x1 > 1 tamamen dışarıda

Cohen-Sutherland Algoritması (3 Boyut için) Bu algoritmanın kullanım amacı görüntülenen alan dışına uzanan doğruların kesilmesidir. Algoritma sayesinde gösterilmeyen yerlerde bulunan çizgiler(doğrular) hesaplanmadan sadece gösterilen alan için hesaplama yapılarak performans artırımı olabilmektedir.

Cohen-Sutherland Algoritması (3 Boyut için) 6 bitlik kod kullanılır ve uç noktalar için 27 bölge tanımlanır. En sağdaki bit ilk bit olarak değerlendirilse; 1. bit 1 ise uç nokta pencere solunda 2. bit 1 ise uç nokta pencere sağında 3. bit 1 ise uç nokta pencerenin altında 4. bit 1 ise uç nokta pencerenin üstünde 5. bit 1 ise uç nokta pencerenin önünde (yakın) -6. bit 1 ise uç nokta pencerenin arkasında(uzak) Çıkış kodu nesnenin görülebilir, görülemez, kısmen görülebilir olma durumlarının tespitini sağlar.

Cohen-Sutherland Algoritması (3 Boyut için) Bir kırpma küpü kullanılarak küp dışında kalan çizgiyi kırpmak istediğimizde çizginin parametrik denklemleri kullanılır: Küpün bir A yüzüne göre kırpma yapılmak istenirse y=1 alınır ve t hesaplanır. Benzer şekilde x ve z’de kırpma yapmak için de hesaplamalar yapılır.

OpenGL’de 3Boyutlu Cisimlerin Görünüşü *Nate Robins’ OpenGL tutorials