Sunuyu indir
YayınlayanFidan Altan Değiştirilmiş 9 yıl önce
2
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.
3
Ş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.
4
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. }
5
{ 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
6
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.
7
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.
8
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 Tam görülebilir ij sağ 0010 Tam görülemez ij sol üst 1000 Cd Kısmen görülebilir Ef Kl
9
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.}
10
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.}
11
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}
12
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;
23
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
24
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.
25
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.
26
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.
27
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.
28
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.
29
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
30
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:
31
Bölümlerin Kodları
32
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.
33
Doğru Kırpma Örnek P3[010101] ve P4[100110] noktalarına sahip olan doğru reddedilir.
34
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:
35
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:
36
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.
37
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.
38
Çokgen Kırpma Üç boyutlu kırpma için en yaygın olan durum çokgenlerden oluşan grafik objelerinin kırpılması işlemidir.
39
Ç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.
40
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.
41
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
42
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ı
43
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.
44
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
45
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.
46
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.
47
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.
48
OpenGL’de 3Boyutlu Cisimlerin Görünüşü
*Nate Robins’ OpenGL tutorials
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.