BÖLÜM 1
1.ÜÇÜNCÜ BOYUT
1.0 GiriÅŸ
İnsanlar ilk çağlardan bu yana çevresinde bulunan cisimleri, meydana gelmekte olan olayları diğerlerine anlatabilmek için resim,heykel ve yazı gibi vasıtaları kullana gelmiştir. İnsanlık, ilerleyen zaman içerisinde, teknolojinin de gelişmesinin etkisiyle, cisimlerin temsili yapılırken ne kadar çok gerçekçi olunursa, o kadar etkili bir temsil ortaya çıkacağını anlamış ve bu yönde çalışmalarını ilerletme yolunu seçmiştir.
Günümüze geldiğimizde ise insanların hayatında, bir iletişim aygıtı olan bilgisayar, bir çok alanda yer almıştır. Bilgisayarın bir çok alanda kullanılmaya başlanmasıyla , cisimlerin, olayların kısacası bilgisayar ekranından insanlara ulaştırılmak istenilen her şeyin günlük hayattaki gibi gerçek olması yani üçboyutlu olarak görüntülenmek istenilmesi kaçınılmaz hale gelmiştir.
İnsan çevresinde bulunan her türlü nesneyi üç boyutlu olarak görüp algılamaktadır. Göz, yapısında bulunan katmanlar yardımıyla cisimlerden yansıyan ışıkları algılayarak beyne iletmekte ve böylelikle bizler çevremizdeki cisimlerin renk,şekil ve derinlilerini algılayabilmekteyiz. Cisimlerin renk ve şekillerine ek olarak derinlikleri de işin içine girince üçüncü boyut denilen olay ortaya çıkmaktadır. Öyleyse diyebiliriz ki insanın direkt olarak nesneleri algılamasında herhangi bir sorun söz konusu değildir. Fakat insan bir monitör aracılığıyla bu işi yapmak istediğinde ise nesnelerin derinliği yani üçüncü boyutu ile ilgili bir sorun ortaya çıkmaktadır. Bu sorun görüntülemek istediğimiz nesnelerin üç boyutlu olmasına rağmen kullandığımız monitörlerin ise iki boyutlu cihazlar olmasıdır. Bu durum, bilgisayar grafiklerinde ekrandaki geometrik modellerin görüntülerinin insan beyninde üç boyutlu gerçek görüntü hissini vermesi veya insanını onu gerçek sanmasını amaçlayan Sanal Gerçeklik(Virtual Reality) konusunun ortaya çıkmasına gerekçe olmuştur.
Bilgisayar ekranında bir bilgisayar modeli oluşturduğumuzu düşünelim bu modelin her bir koordinatını bilmemiz gerekir. Ancak bu koordinat, cismin kendi koordinat sisteminde doğru olması gerekmektedir. Kendi koordinat sisteminde tanımlanan cisim daha sonra ekran koordinat sistemine, kamera koordinat sistemine veya dünya koordinat sistemine aktarılarak görüntü oluşturulur.
Derinlik oluşturma ise z ekseninde gerçekleşen hareketlerde cismin diğer iki koordinatının etki alıp yeni konum belirlenmesi sonucu oluşur. Yapılan bu işlemler neticesinde ekranda bulunan cisme üçüncü bir boyut yani z ekseni eklenilerek cisme üç boyutlu bir görünüm kazandırılmış olur.
BÖLÜM 2
2.ÜÇ BOYUTLU GRAFİKLER İÇİN TEMEL İŞLEMLER VE TANIMLAMALAR
2.0 GiriÅŸ
Bilgisayarda bir nesne görüntüsünün çizilebilmesi ve bu görüntü üzerinde çeşitli matematiksel dönüşümlerin uygulanabilmesi için nesnenin tanımlanması , seçilen uygun bir koordinat sistemine göre noktalar ve bunları birleştiren doğrularla yapılır. Nesne üzerinde herhangi bir dönüşümün gerçekleştirilebilmesi bu doğrunun bu noktalar kullanılarak yapılır. Örneğin nesnenin büyüklüğünün değiştirilmesi , bir yerden başka bir yere taşınması , nesnenin döndürülmesi ve perspektifinin oluşturulması gibi nesneyi tanımlayan noktaların her birine bu dönüşüm işlemlerinin ayrı ayrı uygulanması ile yapılır. Bu dönüşümler bilgisayarda grafik düzenlemelerin temelini oluşturur. Borland grafik paketi , programcıya sadece çizimlerde kullanılan temel ve yardımcı komutları verir. Nesne üzerinde dönüşümleri gerçekleştirmek için kullanılabilecek herhangi bir komut içermez.
Dönüşümler iki üç boyutlu nesneler için uygulanabilir matematiksel formüllerdir. Bilgisayarın ekranı iki boyutlu olarak çalışmak zorundadır. Üç boyutlu nesnelerin ekranda görüntülenmesi , nesnenin boyutunun bir azaltılmasıyla gerçekleştirilir. Boyutun azaltılması ise nesne görüntüsünün ekran düzlemi üzerine iz düşürülmesiyle yapılır. (Erdun 1993)
Bilgisayar yardımıyla bir resmin tasarlanması için ekran üzerindeki noktalar kullanılır. Bazı dönüşüm işlemleri yardımıyla yüzeylerin oluşturulması için bir araya toplanmış noktalar kullanılır ve canlı resimler elde etmek içinde bu yüzeylerden faydalanılır .
2.1Geometrik Tanımlamalar
2.2. 1 Nokta tanımlaması
Uzayda bir yeri belirten sıfır boyutlu nesnelere nokta denir. Noktalar kullanarak doğrular ve doğrular kullanarak da çeşitli nesnelerin çizimi yapılabilir. Noktalar iki ve üç boyutlu olarak koordinat sisteminde gösterilebilir(Şekil 2.1)
Matematiksel olarak ise nokta bir matris şeklinde gösterilebilir . Noktaların matris şeklinde tanımlanması dönüşüm işlemlerinin daha iyi anlaşılmasını ve yazımını sağlar . Üç boyutlu koordinat sisteminde nokta, matris formunda iki şekilde gösterilebilir.
P=[x y z] veya P = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image002.gif[/IMG]
Burada gösterilen P matrisleri çoğunlukla vektör olarak isimlendirilirler.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image003.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image004.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image005.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image006.gif[/IMG] Y y
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image007.gif[/IMG] p(x,y,z) p(x,y)
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image008.gif[/IMG] 0 x 0 x
z (a) (b)
Şekil 2.1 Noktanın gösterilmesi (a)üç boyutlu (b) iki boyutlu
2.1.2 Doğru parçası tanımı
Bir doğru tanımlayabilmek için en az iki nokta kullanılmaktadır. Bir doğru parçası tanımlayabilmek için doğru parçasının başlangıç ve bitiş noktalarının belirlenmesi gereklidir. (Şekil 2.2)
Bir doğru parçası bir vektör olarak da gösterilebilir. Koordinat sisteminde , nesneyi oluşturan vektörleri belirleyen noktalar serisi , bir matris olarak bilgisayarda ifade edilebilir. Bu matris bir nesneyi tanımlayan noktaların tümünü içerir. Bir nesneye dönüşüm işlemi uygulanması bu matris değerlerinin her birine ilgili dönüşüm işlemlerinin uygulanması ile sağlanır.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image009.gif[/IMG] y
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image010.gif[/IMG] P2(x2,y2)
P1(x1,y1)
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image011.gif[/IMG] 0 x
Şekil 2.2 Bir doğru parçası
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image012.gif[/IMG]
2.1.3 Yüzey tanımlanması
Bilgisayar ekranında nesnelerin geometrik modelleri oluşturulurken yüzey tanımlamaları yapılır. Bir nesnenin kaç yüzeyden oluştuğu ve bu yüzeylerin biçimi, yüzeyi oluşturan noktalar tarafından belirlenir. Bir küpün alt yüzeyi vardır ve her bir yüzey dört köşe ile tanımlanır. Nesneleri dışardan göründüğü şekliyle her bir yüzeyinin etrafında dizilen noktaları saat ibresinin ters yönünde tanımlamak önemlidir.
2.1.3.1 Üç boyutlu yüzey
Üç boyutlu koordinat sisteminde bir yüzey iki şekilde gösterilebilir. Bunlar:
Z = f ( x, y ) veya g (x, y, z) = 0
Birincisinde x ve y koordinat değerleri kullanılarak z değeri ile yüzey oluştururlar. Diğerinde ise bir değişkenin verilen sabit değerleri için diğer değişken değerlerinin değiştirilmesiyle elde edilen eğri gruplarından yüzeyler oluşturulur.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image013.gif[/IMG] y
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image014.gif[/IMG]
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image015.gif[/IMG]
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image016.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image017.gif[/IMG] x
z
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image018.gif[/IMG]
Şekil 2.3 Üç boyutlu koordinat sisteminde yüzey gösterimi
Bilgisayar grafiklerinde bir düzlem denklemi aşağıdaki gibidir.
ax+by+cz+d=0
Burada , eğer d sıfırdan farklı ise denklemin d ye bölünmesi ile düzlemde bir değişiklik olmaz. Bu nedenle denklemde sadece üç nokta bir düzlemi belirler. d orijinden düzleme olan uzaklık değerini gösterir ve aynı a,b,c katsayılarına sahip denklemlerden elde edilen bütün düzlemler birbirine paraleldir. d=0 ise düzlem orijinden geçer.
aX + bY + cZ = 0
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image019.gif[/IMG] y
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image020.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image021.gif[/IMG]
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image022.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image023.gif[/IMG] P(x,y,z)
d
x
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image024.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image025.gif[/IMG] 0
z
Şekil 2.4 Üç boyutlu koordinat sisteminde düzlem
P(x,y,z) noktası düzlem üzerinde olan keyfi bir noktadır ve P matrisi şeklinde gösterilebilir .Orijinden P(x,y,z) yönünde olan doğru veya vektör düzlem içinden geçer. Aynı zamanda n(a,b,c) üç boyutlu bir nokta olarak ele alınabilir ve aşağıdaki gibi yazılabilir.
n = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image027.gif[/IMG] , p = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image029.gif[/IMG]
İki vektörün skaler çarpımını kullanarak orijinden geçen düzlemin denklemi yazılabilir.
p * n = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image029.gif[/IMG] * [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image027.gif[/IMG]
n,düzlemindeki tüm vektörler diktirler. Bu nedenle üç boyutlu uzayda düzlemin doğrultusunu kontrol eder. Sadece düzlemin orijinden olan uzaklığına etki eder ve n(a,b,c) her zaman
ax + by + cz + d = 0
düzlemine dik bir vektörü belirtir.
BÖLÜM 3
3.GEOMETRİK DÖNÜŞÜM İŞLEMLERİ
3.0 GiriÅŸ
Burada temel iki boyutlu dönüşümlerin anlatımından yola çıkarak üç boyutlu dönüşüm ve nesnelerin modellenmesi anlatılacaktır.
3.1Temel Dönüşüm İlkeleri
Bilgisayar grafiklerinde dönüşüm işlemi olarak adlandırılan üç temel işlem vardır. Bunlar:
1-Konum DeÄŸiÅŸtirme (Translation)
·X ekseninde konum değiştirme
·Y ekseninde konum değiştirme
·Z ekseninde konum değiştirme(X ve Y yönünde konum değiştirme)
2- Ölçeklendirme (Scaling)
·Büyültme
·Küçültme
3-Döndürme (Rotating)
·X ekseninde döndürme
·Y ekseninde döndürme
·Z ekseninde döndürme
Bu üç temel işlem ya ayrı ayrı veya arka arkaya kullanılarak tüm dönüşümler gerçekleştirilir.
Bunun için matematiksel hesaplamalara ihtiyaç duyulur. Bilgisayar grafiklerinde nesne uzayı terimi bizim anladığımız gerçek dünyada nesnelerin gerçek koordinatlarını tanımlamak için kullanılır. Aynı nesnenin bilgisayar ekranında tanımlanması içinde ekran uzayı terimi kullanılır . Nesneler dönüşüm işlemlerinin bir arada kullanılmasıyla nesne uzayından iki boyutlu ekran uzayına tanımlanırlar. Yine geometrik hesaplamalar kullanılarak üç boyutlu resimlerin animasyonu iki boyutlu ekran üzerinde gerçekleştirilir.
Bir çok bilgisayar grafik uygulamalarında dönüşüm iÅŸlemleri yaygın olarak kullanılır. Robotların simülasyonu, eklemli figürlerin animasyonu gibi, homojen koordinatlar matrisi olarak isimlendirilen matematiksel gösterim matris çarpımları gibi bütün dönüşüm iÅŸlemlerinin yapılmasına olanak tanır. Bu metotla üç boyutlu döndürme iÅŸlemini anlatmak için 3*3 matrise 4. Kolon ve satır eklenir. Aynı matrisle konum deÄŸiÅŸtirme de yapılabilir. Bir noktanın koordinatlarının gösterilmesinde p(x,y,z,w) veya iki boyutluda p(x,y,w) kullanılır. Bazı nedenlerle w “Y” olarak alınır ve matris çarpımının bir sonucu olarak dönüşüm iÅŸlemleri üzerinde etkili olmaz.
3.2 İki Boyutlu Dönüşüm İşlemleri
3.2.1 Konum deÄŸiÅŸtirme
İki boyutlu konum değiştirme P(x,y) noktasının koordinat değerlerine Tx,Ty konum değiştirme değerleri eklenerek gerçekleştirilir. Tx x ekseni yönünde , Ty y ekseni yönünde P noktasının hareketini belirtir. Şekil (3.1)
Bu iÅŸlem:
Px’ =Px +Tx
Py’ =Py+Ty
Aynı işlemler homojen koordinatlar matrisi şeklinde aşağıdaki gibi gösterilir.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image033.gif[/IMG]
P’(x,y,1 ) =P(x,y,1) *
T konum değiştirme matrisini gösterirse :
P’=P * T
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image034.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image035.gif[/IMG] y y
P’(x,y)
P(x,y) P(x,y)
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image036.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image036.gif[/IMG] 0 x 0 x
Şekil 3.1 İki boyutlu konum değiştirme
3.2.2 İki boyutlu ölçeklendirme
Bir resim x,y koordinat ekseninde boyutlarının ölçeklendirilmesi için resmi oluÅŸturan bütün noktalar aynı ölçeklendirme katsayıları Sx,Sy ile sırasıyla çarpılmalıdır. Åžekil 3.2’de görüldüğü gibi bütün noktalar (P1..P4) ölçeklendirme katsayısı 2 ile (Sx,Sy için ) çarpılmıştır. EÄŸer örnek olarak p1 noktası ele alınırsa ölçeklendirme iÅŸlemi aÅŸağıdaki ÅŸekilde yapılmış olur.
Pıx’ P1x’=p1x*Sx
Pıy’=P1y*Sy
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image038.gif[/IMG]matris formunda yazarsak:
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image041.gif[/IMG]
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image042.gif[/IMG]
Pı’(x,y,1)=Pı(x,y,1)*
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image042.gif[/IMG]
Kısa formda yazmak istersek:
P’=P*S
S ölçeklendirme matrisini göstermektedir.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image043.gif[/IMG]
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image044.gif[/IMG]
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image045.gif[/IMG] P’4 p P’3
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image046.gif[/IMG] P4 P3
P1 P2 P’1 P’2
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image047.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image048.gif[/IMG]
Şekil 3 . 2 . İki boyutlu Ölçeklendirme
3.2.3 İki Boyutlu Döndürme
Orijindeki bir noktanın iki boyutlu döndürme işlemleri, dönme açılarının sinüs ve kosinüs değerlerinin kullanılmasıyla yapılır. Eğer bir P ( x, y ) noktası orijinden saat yönünün tersi yönde 0 açısı ile döndürülürse aşağıdaki eşitlikler yazılabilir. Bu durum şekil 3 . 3 de gösterilmiştir.
PX’ = PX * Cosy – PY * Siny
PY’ = PX * Siny – PY * Cosy
Veya matris ÅŸeklinde yazarsak :
P’ ( x, y, 1 ) = P ( x, y, 1 ) * [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image050.gif[/IMG]
R döndürme matrisi ise :
P’ = P * R
Şeklinde bir ifade yazılabilir.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image051.gif[/IMG] [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image012.gif[/IMG]y
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image052.gif[/IMG] P’
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image012.gif[/IMG]
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image053.gif[/IMG] 0 x
P
Şekil 3.3 İki boyutlu döndürme
3.2.4 Herhangi bir noktanın iki boyutlu döndürülmesi
Orijinde olmayan bir noktanın döndürülmesi işlemini yapmak robot teknolojisinde ve robot ilişkili bilgisayar grafiklerinin uygulamalarında sıkça kullanılır. Bu döndürme işlemi şekil 3 . 4 de gösterildiği gibi üç adımda yapılabilir.
Åžekildeki P ( x, y ) noktasını B ( x, y ) noktası üzerinde a açısı kadar çevirmek istersek ilk iÅŸ olarak B noktasını orijine taşırız. Bu nedenle P ( x, y ) noktası – BX ve – BY
değerleri kadar taşınmış olur. Bu durum matris formunda aşağıdaki gibi gösterilebilir.
T1 = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image055.gif[/IMG]
Daha sonra döndürme işlemi bu taşınmış vektör çevirme matrisi R ile çarpılarak elde edilir.
R = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image057.gif[/IMG]
Sonuç olarak döndürülmüş nokta eski yerine taşınır. Bu T1-1 ile tersine taşınma işlemi gerçekleştirilir.
T1 = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image059.gif[/IMG]
Yukarıda verilen üç dönüşüm matrisi şekil 3 . 4 deki dönüşüm işlemlerini yapmak içindir. Burada bu dönüşümlerle ilgili önemli bir faktör, bu dönüşüm işlemlerinin yukarıda anlatıldığı şekliyle ve sırasıyla olması gerekliliğidir. Aksi halde dönüşüm işlemi gerçekleşmeyecektir.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image061.jpg[/IMG] [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image063.jpg[/IMG] [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image065.jpg[/IMG]
Şekil 3.4 İki boyutlu herhangi bir noktanın döndürülmesi
3.3 Üç Boyutlu Geometri
Geçerli iki boyutlu tanıma bir üçüncü boyutun eklenmesiyle üç boyutlu koordinat sistemi elde edilir. Bu yeni boyut, derinliği verir veya Z ekseni olarak isimlendirilir. Üç boyutlu grafikler de birçok yönden iki boyutlu grafiklerin uzantısıdır. Üç boyutlu grafiklerin bilgisayar ekranında görüntülenmesi iki boyutlu hale dönüştürülerek yapılır. Bu da üç boyutlu nesne görüntüsünün projeksiyon yöntemi ile bilgisayar ekranına iz düşürülmesi ile olur. Üç boyutlu bilgisayar grafiklerinde sol-el ve sağ-el koordinat sistemi olmak üzere iki çeşit koordinat sistemi kullanılır. Genellikle, nesnenin tanımlanmasında sağ-el, görüntülenmesinde ise pozitif z nokta değerlerinin içerde kaldığı sol-el koordinat sistemi tercih edilir. ( şekil 3 . 5 )
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image066.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image067.gif[/IMG] y y
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image068.gif[/IMG] z
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image069.gif[/IMG]
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image070.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image005.gif[/IMG]o x o x
(a)Sol el
z (b) SaÄŸ el
Åžekil 3 . 5 Koordinat sistemleri
Üçboyutlu homojen koordinat sisteminde bir noktanın gösterimi için kullanılan P vektörü :
P = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image072.gif[/IMG]
şeklindedir. İkinci boyutta bir nokta, üç boyutlu homojen koordinatlarda kullanılacağı zaman w daima 1 olarak alınır. Üç boyutlu nesnelerin ekranda görüntülenmesi durumunda w için farklı değerler kullanılabilir. Üç boyutlu homojen dönüşüm matrisinin iki boyutlu homojen dönüşüm matrisinden tek farkı sadece üçüncü boyut hesaplamalar için bir satır ve sütun eklenmiş olmasıdır.
3.3.1 Üç Boyutlu Konum Değiştirme İşlemi
Bir nesnenin konum değiştirmesi için nesneyi oluşturan bütün noktaların x, y, z koordinat değerlerine sırayla TX, TY, TZ öteleme miktarlarının eklenmesiyle yapılır. Üç boyutlu konum değiştirme denklemleri :
PX’ = PX + TX
PY’ = PY +TY
PZ’ = PZ+ TZ
ÅŸeklindedir.
Konum değiştirme işleminin homojen koordinat matrisi şeklinde gösterimi aşağıdaki gibidir.
T = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image074.gif[/IMG]
Bir P ( x, y, z ) noktası için konum değiştirme işleminin gösterimi ise :
P’ ( x, y, z, 1 ) = P ( x, y, z, 1 ) * [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image074.gif[/IMG]
Åžeklindedir. TZ ‘nin önceki deÄŸerine göre konum deÄŸiÅŸtirme iÅŸlemi z ekseni üzerindedir.
3.3.2 Üç Boyutlu Ölçeklendirme İşlemi
Diğer işlemlerde olduğu gibi ölçeklendirme işlemi iki boyutludaki gibidir. Tek fark yeni ölçeklendirme katsayısı SZ dir. Bu durum matris formunda aşağıdaki gibi gösterilir.
S = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image076.gif[/IMG]
Bir P ( x, y, z ) noktası için ölçeklendirme işleminin gösterimi ise,
P’ ( x, y, z, 1 ) = P ( x, y, z, 1 ) * [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image076.gif[/IMG]
Şeklindedir. Ölçeklendirme işleminde katsayılardan birinin 1 den küçük olması durumunda nesnenin boyu ilgili yönde küçülür. 1 den büyük olması durumunda nesnenin boyu ilgili yönde büyür. Nesnenin boyutunun her yönde eşit oranlarda büyütülmesi veya küçültülmesi, her üç ölçeklendirme katsayısının birbirine eşit olarak alınmasıyla sağlanır.
3.3.3 Üç Boyutlu Döndürme İşlemi
Üç boyutluda da iki boyutlu döndürme işlemi geçerli olur. Bu nedenle eğer bir nesne üç boyutlu sistemde döndürülmek istenirse dönüş ekseni mutlaka belirtilmelidir. Ayrıca pozitif dönüş yönünün ne olacağı önemlidir. Bir eksen etrafında pozitif dönüş,döndürme ekseninin pozitif tarafından orijine doğru bakıldığında saat ibresinin dönüş yönünün tersi olarak belirlenir.
Üç eksen etrafında birbirinden bağımsız dönüşler yapılabilir. Bir eksen etrafında döndürme işlemi yapılırken nesnenin koordinatlarından, döndürmenin yapıldığı eksene ait koordinat değeri sabit tutularak diğer koordinat değerleri dönüşüm işlemine tabi tutulur. Bu nedenle bir z düzleminde döndürme işlemi iki boyutludur. Saat tersi yönündeki x, y, z eksenleri üzerindeki dönüşler aşağıda gösterilmiştir.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image077.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image078.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image079.gif[/IMG][IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image012.gif[/IMG] y z
o x
Şekil 3 . 6 Saat yönünün tersi yönde üç boyutlu döndürme
X ekseni etrafındaki dönüşte nesne noktalarının x değerleri sabit tutulur.
RX = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image081.gif[/IMG]
Y ekseni etrafındaki dönüşte nesne noktalarının y değerleri sabit tutulur.
RY = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image083.gif[/IMG]
Z ekseni etrafındaki dönüşte nesne noktalarının z değerleri sabit tutulur
.
RZ = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image085.gif[/IMG]
bX, bY, bZ açılarına bağlı olarak bir nesnenin her üç eksene göre döndürülmesini sağlayan dönüşüm matrisi, her eksen için ayrı olarak yazılan döndürme matrislerinin çarpımı ile elde edilir.
R = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image087.gif[/IMG]
BÖLÜM 4
4. ÜÇ BOYUTLU GÖRÜNTÜ OLUŞTURMA
4.0 GiriÅŸ
Üç boyutlu nesne bilgisayar ekranında görüntülenene kadar birçok değişik aşamalardan geçmek zorundadır. Burada bu aşamaları kısaca gözden geçireceğiz.
3B Görüntü İçin Dönüşümler ( 3D Viewing Transformations ) : 3B’lu bilgisayar terimlerinden “ dünya koordinatları uzayı “ içinde yaÅŸadığımız dünyayı tanımlar. EÄŸer biz bu uzayda bulunan bir nesneyi bilgisayar ekranında görüntülemek istersek aÅŸağıdakileri tanımlamamız gerekir.
·Nesneye bakarken bulunduğumuz noktayı
·Bakış eğimi açısını
·Nesnede kesin olarak baktığımız noktayı ( interest point )
Bir de özel bir bakış noktasından görüntülenebilir kısmın belirlenmesi gerekir. Bütün tanımlamalar yapıldıktan sonra görüntülenecek resmin bilgileri doÄŸrultusunda nesnenin bilgisayar ekranına aktarılma iÅŸlemine geçilir. Bu bilgiler ışığında 3B’lu dönüşümün ilk adımı tam bir dönüşüm için nesneler, nesne uzayından ekran uzayına aktarılırlar.
Kesit Alma İşlemi ( Clipping ) : Gözün doğal özelliklerinden dolayı bakış alanının boyutları sınırlıdır. Çünkü arkamızda ne var göremeyiz. Bu sınırlama bilgisayar ekranında kesme işlemiyle gerçekleştirilir. Nesnelerin üzerinde bakış alanı sınırları dışında kalan hatlara kesme işlemi uygulanır.
Görünüşün Ölçeklendirilmesi ( Perspektive Scatting ) : Nesnelerin doğal görünüşünü elde etmek, başka bir deyişle cismin ekrana uzaktaki görüntüsü küçük, yakındaki görüntüsü geniş görünüşlü olması için görünüşün ölçeklendirilmesi gerekir. Aksi halde nesnenin görüntüsü aslından farklı olur.
Görünmeyen Yüzeyin Kaldırılması ( Hidden Surface Removal ) : Nesnenin görünmeyen parçalarının iÅŸlemlerinin tamamlanması sırasında bunların görüntülenmesine gerek yoktur. Bu iÅŸleme “ görünmeyen yüzeyin kaldırılması iÅŸlemi “ denilir.
Resim İşleme ( Rendering ) : Bir diÄŸer iÅŸlem de benzer iÅŸleyiÅŸleri gerektiren “ resim iÅŸleme “ dir. Görüntülenemez hatlar veya yüzey kaldırılması yerine görüntüyü oluÅŸturan her bir piksel görüntülenebilir yüzey üzerinde olup olmadığı ayrı ayrı test edilir. bir de daha kaliteli resim için gölgeler ve diÄŸer ışık iliÅŸkili özellikler aynı tip iÅŸlemle saÄŸlanır.
Görüntü Sistemi ( Display System ) : Sonuçta grafiklerin bilgileri bu değişik aşamalarda işlenip, çizim, ekranda tutan display kontrolörü ve frame buffer içeren display sistemine gönderilebilir olmalıdır.
4.1 Sanal Kamera ( Virtual Camera )
Burada kullanılan kavramlar ( Öğütmen,1998) dan özetlenerek aktarılmıştır. Animasyon programcılarının başlıca problemlerinden birisi bilgisayar ekranında, üzerinde güzel görüntü efektlerinin yapılabildiği bir görüntü penceresi yapacak piksel dizinin nasıl tanımlanması gerektiğine karar vermektir. Kaliteli resimlerin hazırlanması problemini, kullanıcı, gerçek kameranın simülasyonu ve özel efektlerin yardımıyla çözebilmektedir. Dijital kamera, sanal kamera, sentetik kamera terimleri aynı şeyi ifade ederler ve gerçek hayatta film çekimleri için kullanılan kameranın simülasyonunu veren, aynı düşüncenin sonuçlarıdır. Sanal kamera terimi üç boyutlu bilgisayar grafiklerinde sıkça kullanılır ve üç boyutlu dünya koordinat sistemi içindeki bir nesnenin bilgisayar ekranı üzerindeki iki boyutlu izdüşümünü alan dönüşüm işlemlerinin tümünü içeren bir program parçasının sonucudur. (Levy,1995)
Bir sanal kamera üç boyutlu dünya koordinatlarında tanımlanmış göz noktası ve bakılan nokta olarak isimlendirilmiş iki nokta ile tanımlanabilir. Sanal kameranın tanımı için kullanılan bazı yaygın bilgisayar terimleri aşağıda açıklanmıştır.
·Dünya Koordinat Sistemi (World Coodinate System , WCS ) :Bazen nesne uzayı olarak kullanılsa da nesnelerin temel koordinat sistemidir.
·Bakış Düzlemi ( View Plane , VP ) : Üç boyutlu resmin izdüşümünün yapıldığı düzlem. Genellikle bilgisayar ekranı olarak alınır.
·Bakış Düzlemi Koordinatları (View Plane Coordinates , VPC ) :Bilgisayar ekranı koordinat sistemidir. VP ile ilgilidir.
·İlgilenilen Nokta ( Point of Interest , POI ) : Bakılan görüntü üzerindeki ilgilenilen merkez nokta. Bazen bakış pozisyonu olarak da tanımlanabilir. Eğer bu nokta değişirse ekrandaki görüntü direk olarak etkilenir.
·Bakış Düzleminin Normali (View Plane Distance , VPN ) : Bakış düzleminden ilgilenilen noktaya yönlendirilmiş bir vektördür ve bakış düzlemine diktir.
·Bakış Düzleminin Mesafesi (View Plane Distance , VPD ) :Bakış VPN boyunca POI ve VP arasındaki uzaklığa, bakış düzleminin mesafesi denir.
·Bakış Noktası ( View Point , VPT ) : Göz noktası olarak da bilinir. WCS ile ilişkili olarak kamera pozisyonu veya bakış pozisyonunun üç boyutlu koordinat değerleri ile tanımlandığı noktadır.
Şekil 4.1 de üç boyutlu kamera dünya koordinatlarında ( WCS ) yerleştirilmiştir. Bulunulan noktadan xy, yz, xz yüzeylerine dik olan mesafeler kamera pozisyonunu verir. Z ekseni yukarı bakış yönünü ve POIx, POIy, POIz değerleri dünya koordinat sistemi ( WCS ) ile ilişkili verilmiştir. Bakış noktası normali ( VPN ) kamera objektifi ile ilgilenilen noktayı ( POI ) i birbirine bağlar ve bilgisayar ekranına diktir. Kamera yönü POI ya doğrudur. Bilgisayar ekranı üzerinde sol alt köşe orijin olarak ve XS noktaları sağa doğru, YS noktaları yukarı doğru alınmıştır. Bu dönüşümler kullanıldığında görüntü koordinatları, bilgisayar ekranı koordinat sistemine ( VPC ) dönüştürülmüş olur. Bu işlemler birkaç adımda gerçekleştirilir. İlk olarak orijin ilgi noktasına kaydırılır. Daha sonra P (XC, YC, ZC ) değerleri alınarak bakış noktasına çevrilir. XC ekseni üzerinde YC ekseni ZWCS yi kesene kadar koordinat sistemi çevrilir ve eksen sistemi de XC ekseni etrafında ZC ekseni ilgilenilen noktayı gösterene kadar döndürülür. Sonuçta koordinat sistemini sol-el koordinat sistemine dönüştürmek için XC ekseninin yönü ters çevrilir. Bu beş dönüşüm işlemi aşağıda görüldüğü gibi dört matris işlemi olarak ifade edilmiştir. Bunlar :
T1 = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image089.gif[/IMG]
T2=[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image091.gif[/IMG]
T3=[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image093.gif[/IMG]
T4=[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image095.gif[/IMG]
Dönüşüm matrisleri içinde P ( XC, YC, ZC ) dünya koordinat sistemiyle ilişkilendirilmiş üç boyutlu kamera koordinatları tanımına uygun gelir. POI ile kamera koordinatlarını birleştiren D doğrusu aşağıdaki gibi ifade edilebilir :
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image097.gif[/IMG] D=
D’nin x-y düzlemindeki yansıması olan L deÄŸeri ise :
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image099.gif[/IMG]
L =
Åžeklinde yazılır ve P ( X’, Y’, Z’ ) nün deÄŸerleri de aÅŸağıdaki gibi hesaplanır.
X’ = ( XC - XPOI )
Y’ = ( YC - YPOI )
Z’ = ( ZC – ZPOI )
Böylece dünya koordinatlarında verilen bir P ( XW, YW, ZW ) noktası aşağıdaki formül ile kamera koordinatlarına dönüştürülebilir.
P ( XC, YC, ZC ) = P ( XC, YC, ZC ) * T
Yukarıda verilen dönüşüm işlemlerinin tümünü bir seri şeklinde gösteren dönüşüm matrisleridir.
P ( XC, YC, ZC ) = P ( XW, YW, ZW ) * ( T1 ,T2, T3, T4 )
Verilmiş bir noktanın yukarıdaki gibi kamera koordinatlarının bulunmasından sonra ekran koordinat değerleri de hesaplanabilir. Bizim görüntümüzü oluşturan noktaların bütün koordinat değerleri yukarıda tanımlandığı şekliyle hesaplanır. Kullanıcı, kamera hareketlerini tanımladığı gibi bakış noktasını ve ilgilenilen noktayı da değiştirmekte serbesttir. Bu durum değişken bakış şartlarının ortaya çıkmasını sağlar. Her bir çerçevenin hesaplanması sırasında program gerekli dönüşüm parametrelerini kontrol eder ve eğer onlar değişirse bir sonraki çerçeve yeni tanımlanan parametrelere göre hesaplanır.
4.2 Boyutlu Kesit Alma İşlemi ( Clipping )
Bir animasyon sistemi içerisinde üç boyutlu kesit alma işlemi görüntüleme, işlemlerinin temel parçasıdır. Kesit alma işlemleri ile görüntü oluşturmanın genliğini sınırlarken bazı istenmeyen etkiler olabilir. Örneğin negatif noktaların yansıması gibi veya kesit alma sınırları dışında kalan noktaların neden olduğu grafik ekran sınır değerleri ihlalleri, resimleri bozabilir.
Åžekil 4.2 de görüldüğü gibi görüntü oluÅŸturma genliÄŸi saÄŸ, sol, üst ve alt kesme yüzeylerinden oluÅŸur. Görüntü oluÅŸturma algoritması, görüntünün görüntülenebilir bölgelerini sınırlayan bu yüzeylerle nesnelerin mevcut hatlarını keser. Uzak noktalar için böyle bir sınırlama olmamasından dolayı bu görüntü oluÅŸturma genliÄŸiyle, sonsuz bir görüş elde edilebilir. Görüntüyü daha gerçekçi yapmak için ön ve araka kesme yüzeyleri adı ile iki yeni kesme yüzeyi daha mevcut dört yüzeye eklenmiÅŸtir. Ön kesme yüzeyinin amacı, görüntü yüzeyinin veya göz noktasının arkasında bulunan noktaların görüntülenmesini saÄŸlamaktır. Arka kesme yüzeyi ise uzak görüntü genliÄŸinde gerçeÄŸe aykırı olarak görüntülenmiÅŸ olan noktaları kesmek için kullanılmıştır. Bu iki yüzey ile kesilmiÅŸ görüntü genliÄŸine “ sınırlı görüntü genliÄŸi “ adı verilir.
3B’lu grafikte kesme iÅŸlemi genellikle 3B’lu göz koordinat sistemi içinde yapılır. Göz koordinatları içindeki kesme, kesme iÅŸleminden sonra görünür olmayan noktaların dönüşüm iÅŸlemlerini gerektirebilir. Fakat 3B’lu nesne uzayındaki kesme iÅŸlemlerinin zorlukları yanında bu durum önemsenmeyebilir. (Levy ,1995 )
4.3 Ekran Üzerinde Görüntü Oluşturma
DeÄŸiÅŸik görsel efektler elde etmek için deÄŸiÅŸik projeksiyon teknikleri kullanılabilir. Üç boyutlu bilgisayar grafiklerinde 3B’lu bir nesnenin projeksiyonu “ planar geometric projections “ olarak isimlendirilen bir dizi dönüşümle 2B’lu bilgisayar ekranı üzerindeki noktaların izdüşümleri alınarak yapılır. Yani nesnenin z koordinatı atılır.
Projeksiyon teknikleri kullanım açısından paralel ve perspektif projeksiyon olarak iki gruba ayrılabilir. Projeksiyonda önemli olan, projeksiyon çizgilerinin projeksiyon düzlemi ile yaptığı açı, projeksiyon yönü (nesneye hangi yönden bakıldığı) ve projeksiyon merkezinin nesneye olan uzaklığıdır. Paralel projeksiyonda, projeksiyon merkezinin uzaklığı sonsuz olarak kabul edilir. Bu yüzden projeksiyon çizgileri birbirine paraleldir. Perspektif projeksiyonda ise projeksiyon çizgileri paralel değildir. Paralel projeksiyon da kendi aralarında gruplara ayrılmaktadır. Paralel projeksiyon mimarlar, desinatörler, mühendisler ve diğer çizim işiyle uğraşanlar tarafından tercih edilir. ( Leung,1989 )
4.3.1 Perspektif Projeksiyon
Gerçek dünyada nesneler üç boyut içinde algılanır fakat bilgisayar ekranında sadece iki boyut vardır ( x, y ) . Bu nedenle üç boyutlu dünya koordinatlarındaki bir nesnenin iki boyutlu ekran veya görüntü koordinatlarına dönüştürmenin bir yolunu bulmaya gerek vardır. Nesnelerin uzaktaki görünüşlerinin gerçekçi olarak görüntülenmesi için küçük ve dar, ekrana yakın olan görünüşleri büyük ve geniş olmalıdır. Bu perspektif projeksiyonla yapılır. Perspektif projeksiyon bize daha gerçekçi bir görünüş sunmakla birlikte bu işlem uygulandığı zaman nesnelerin tam boyutları kaybolmaktadır. Bu nedenle yaygın olarak tanıtım, reklam, animasyon veya diğer benzer grafik uygulamalarında kullanılır.
Perspektif projeksiyonlarda, projeksiyon doğruları birbirine paralel değildir. Bunlar projeksiyon merkezi olarak adlandırılan bir noktadan çıkarılır. Projeksiyon merkezi tek ise bu projeksiyona tek noktalı, iki tane ise iki noktalı, üç tane ise üç noktalı perspektif projeksiyon denir. Burada sadece tek noktalı projeksiyon tipi ele alınacaktır.
Eğer dünya koordinatlarında tanımlanmış bir P (XW, YW,,ZW ) noktasının perspektif projeksiyonunu bulmak istersek, bir D mesafesinden noktanın bulunduğu yere bakılmış olsun. Bu projeksiyonun ekran üzerindeki oluşumu aşağıdaki şekilde gösterilmiştir.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image044.gif[/IMG] Yekran
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image100.gif[/IMG]
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image101.gif[/IMG]
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image102.gif[/IMG]
Şekil 4.3 Noktanın perspektif projeksiyonu
Daha önce gösterildiği gibi bir üç boyutlu noktanın kamera koordinatları önceki bölümde tanımlanan matrisler kullanılarak bulunabilir. Noktanın kamera koordinat değerleri hesaplandıktan sonra noktanın PXZ, PYZ iki boyutlu ekran koordinatları bulunabilir. Uzaktaki nesneleri küçük görünüşlü yakın nesneleri geniş görünüşlü yapmak ve istenen görüntüyü elde etmek için XEYE ve YEYE değerleri ZEYE ile bölünür.
Böylece :
XSCN = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image104.gif[/IMG]
YSCN = [IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image106.gif[/IMG]
XSCN ve YSCN noktanın iki boyutlu ekran değerlerini gösterir. D perspektif mesafesi, S yarım ekran ölçüsüdür. Bu iki değerin birbirine oranı ölçeklendirme faktörü olarak yukarıdaki eşitliklerde kullanılmıştır. Bu oran perspektif ölçülerini değiştirmeden resmin ölçülerini değiştirir. (Leung,1989)
4.4 Görünmeyen Yüzeyin Kaldırılması
Poligon yüzeylerle ifade edilen katı modellerin görüntülenmesindeki problemlerden biri belirlenmiş kamera pozisyonundan görüntülenmeyecek gizli yüzeylerin kaldırılma gerekliliğidir. Görünmeyen yüzeylerin kaldırılması ile katı cisimlerin görüntülenmesi için birçok algoritma geliştirilmiştir.
İki farklı yaklaşım nesnelerin görünmeyen parçaları kaldırılabilir. Birinci grup algoritmalar “ görüntü uzayı “ algoritmalarıdır ve ekran uzayında çalışırlar. Kısaca görüntüyü oluÅŸturan çerçevenin her pikseline onun yoÄŸunluÄŸu göz önünde bulundurularak karar verilir. DiÄŸer bir deyiÅŸle bu pikselde birden fazla yüzey çalışması varsa hangi yüzeyin görüntüleneceÄŸini bulmak için kullanılır. Z buffer algoritması bu yaklaşıma örnek olarak verilebilir. “ Nesne uzayı “ algoritmaları nesne uzayında bulunan nesnelerin görüntülenebilirliÄŸine karar verir. Bu algoritmalar baÅŸlangıçta nesne uzayında kullanılır fakat son görüntü, görüntü uzayında yer alır. Katı cisimlerin görünmeyen yüzeylerini kaldırarak görüntülenmesini saÄŸlayan birçok algoritma kullanılmaktadır. Animasyonda bir görüntü üç deÄŸiÅŸik formda görüntülenebilir.
·Kafes-görüntü formu ( Wire-frame form ) : Arka yüzeyler haricinde kalan bütün yüzeyler görüntülenebilir.
·Görünmeyen yüzeylerin kaldırıldığı form ( Hidden surfaces removed form ) : Görünmeyen çizgiler kaldırılır.
·Pürüzsüz şekillendirme formu ( Smoothly rendered form ) : Gölgelendirme ve diğer yüzey bilgilerinin bulunabildiği formdur.
Wire-frame resimleri seri hareketlerin hızlı incelenmesi için kullanışlıdır. Nesnenin görünmeyen parçalarını bulmayı içeren fazladan hesaplama olmadığı için görüntüleme çok hızlı olabilir. Görüntüleme süresi özel grafik yetenekleri bulunmayan sıradan çalışma merkezlerinin hızına yakındır.
Görünmeyen yüzeylerin kaldırıldığı görünüşler, görüntüye daha güzel bir bakış sağlayabilir. Animatör, animasyonu yapılmış nesnenin durumunu ekran dışına taşıp taşmadığını test edebilir.
En son görüntülenen form rendered-formdur. Animatörün yansımalar, gölgeler ve yazılarıyla nesnelerin görüntülenebildiği son formdur. Sonuç görüntüleri bu formda üretilir. Animatörün net bir görüntü için en azından nesnenin görünmeyen yüzeylerinin kaldırılmasına ihtiyaç vardır.
4.5 Sıralı Dizilerle Görünmeyen Yüzeylerin Kaldırılması
Dizilerin kullanılmasında dizilerle görüntü uzayının bir şekli çizilir. Bu şeklin çizilmesinde diziler x,y,z koordinatlarına göre sıralanır. Daha sonra bu sıralan dizi, görünen yüzeylerin hesaplanması zaten rotate işlemlerinde bulunmuştu, bulunan görünen yüzeylere göre ekrana çizilir. Belirtilen noktalara göre çizilen yüzeyin içi boyanır ve render işlemi tamamlanmış olur. Kısaca açıklanan bu render işlemi bir animasyonun en zor kısmını oluşturmaktadır. Animasyon daha sonra aynı işlemleri sayfa yapılarının tamamına uygular ve böylece art arda ekrana yansıyan bu modeller nesnenin ekranda hareket etmekte olduğunu hissini verir. Saniyede 14 ile 17 frame arasında görülen görüntü gerçek zamanlı hareket sağlar.
BÖLÜM 5 5. PROGRAM HAZIRLAMA 5.1 Giriş
Basit anlamda program yapılırken şu bölümlerden oluşur;
·Değişkenlerin tanımlanması
·Üç boyutlu dönüşümlerin procedür ve function’ları
·Renderle ilgili soring procedür’leri ve fonksiyonları
·Grafik procedür’leri
·Animasyon procedür veya fonksiyonları
·Ana program bloğu
5.2 Program ve Fonksiyon Guruplarının Açıklamaları
5.2.1 Değişkenlerim tanımlanması
Değişkenlerde sırası ile minimum bulunması gerekenler şunlardır
·Nesne sayısına göre node tanımlaması yapılmalıdır. Bu tanımlamalar yapılırken exe program yapısı nedeni ile mümkün olduğunca sabit değişken tanımlanmayıp programı şişirmemek için pointer kullanılmalıdır. Pointer kullanırken pointer en az bir bağ ve x, y, z değişkenleri içeren nokta tanımlamaları kullanılmalıdır.
·Her nesne için bir baÅŸlangıç içeren pointer kullanılmalıdır ki bu pointer sayesinde nesneye ait baÅŸlangıcın neresi olduÄŸunu kolaylıkla bulabiliriz diÄŸer türlü baÅŸlangıç pointer’i kullanılmak istenmezse her pointer’e baÅŸlangıcı gösteren ek bir baÄŸ kullanılır. Fakat bu sıralı baÄŸlı dizilere uymadığı için tercih edilmez.
·World koordinat sistemi tanımlanır. Bu tanımlanan koordinat sistemi x, y, z tanımlamalarını içermelidir.
·Kamera ve ışık noktalarını gösteren pointer veya sabit değişkenler tanımlanır. Bu tanımlarda kamera için yapılan tanımda x,y,z ve world koordinat sistemine göre yapılan açılar tanımlanır.
·Dönüşümler için gerekli olan temporary nesne pointer’leri tanımlanır. Bu pointer’ler yine nesne tipinde olmalıdır.
Bu tanımlar yapıldıktan sonra yine bu tanımlara bağlı olarak nesne uzayı oluşturur.
5.2.2 Dönüşüm Procedürleri
Minimum kullanılan dönüşüm procedürleri ise şunlardır;
·X ekseni hareket procedürü : Bu procedürde belirtilen nesne x ekseninde hareket ettirilir. Bu ise şu sadeleşmiş ve bilgisayara uygunlaştırılmış formülle uygulanır.
x = x+(hareket miktarı)
Burada hareket miktarı piksel cinsinden yada gerekli dönüşüm formülleri uygulanacaksa herhangi bir birimle olmadır.
·Y ekseni hareket procedürü: Bu procedürde belirtilen y ekseninde hareket ettirilir. Bu ise şu sadeleşmiş ve bilgisayara uygunlaştırılmış formülle uygulanır.
y = y+ (hareket miktarı)
Burada hareket miktarı piksel cinsinden yada gerekli dönüşüm formülleri uygulanacaksa herhangi bir birimle olmadır.
·Z ekseni hareket procedürü: Bu procedürde belirtilen nesne x ve y eksenlerinde hareket ettirilir. Bu ise şu sadeleşmiş ve bilgisayara uygunlaştırılmış formüllerle uygulanır.
x = x+(hareket miktarı) y = y+ (hareket miktarı)
Burada hareket miktarı piksel cinsinden yada gerekli dönüşüm formülleri uygulanacaksa herhangi bir birimle olmadır.
·X ekseni döndürme procedür veya fonksiyonu: Bu procedür ve ya fonksiyonda nesne x ekseninde döndürülür. Bunu sağlayan formül şu şekilde bilgisayara adapte edilebilir
y= y.cos(a)-z.sın(a) z=y.sın(a)+z.cos(a)
·Y ekseni döndürme procedür veya fonksiyonu: Bu procedür ve ya fonksiyonda nesne y ekseninde döndürülür. Bunu sağlayan formül şu şekilde bilgisayara adapte edilebilir.
x=x.cos(a)-z.cos(a) z=x.sın(a)+z.cos(a)
·Z ekseni döndürme procedür veya fonksiyonu: Bu procedür ve ya fonksiyonda nesne z ekseninde döndürülür. Bunu sağlayan formül şu şekilde bilgisayara adapte edilebilir.
x=x.cos(a)+y.sın(a) y=x.sın(a)+y.cos(a)
Bu fonksiyon veya procedürlerin ardından istenirse tel kafes halinde bir nesne döndürülüp hareket ettirilebilir.
·Küçültme ve Büyültme Procedürü: Bu procedürde nesne büyültülür veya küçültülür.
x=x/zk y=y/zk Bu formüllerde zk zoom oranıdır.Büyütme işleminde gerçek zoom formülü alınır. Büyütme formülünde ise tersi alınır. Örneğin büyütme oranı 0.9 olsun bu durumda küçültme oranı 1.1 olur.
SONUÇ
Ekte program kodları verilen program, tel kafes şeklinde ekrana çizdirilen mekik modelini, üçboyutlu olarak hareket ettirmektedir. Program çalışırken, mekik.3d adlı text dosyadan mekiğe ait nokta tanımlarını alıp, ilgili procedürde işleyerek ekrana yansıtmakta ve böylece ekran üzerinde sanal bir gerçeklik(Virtual Realty) oluşturulmaktadır.
Ekran üzerinde sürekli bir görüntü sağlayabilmek için X,Y ve Z eksenlerinde döndürme ve hareket ettirme procedürleri ardışık olarak kullanılmıştır. Mekiğin boşlukta(Ekran Uzayında) dolaşıyormuş sanılması için küçültme ve büyültme procedürleri kullanılmıştır. Programın baş kısmında bulunan asembly dili ile yazılmış olan fonksiyonlar ekran modu, grafik sürücüsü ve grafik modlarını ayarlama işlemlerini yapmaktadır.
Programın son kısmında slide show olarak ekrana isim, soyad ve numara yazdıran bir procedür bulunmaktadır. İstenildiği takdirde bu programla başka cisimleri ekrana üç boyutlu olarak çizip olası hareketlerini simüle etmemiz mümkündür. Ekrana yansıtılan cismin hareket yönü ve şekli ana program bloğunda belirlenmiştir.
KAYNAKLAR 1)ÖĞÜTMEN, Nizar,Grafik Formatları ve 3. Boyut,Beta, İstanbul,1997
2)Celos: 3D Transformations/1998
http://www.dfc.psu.edu/Kinematics/Kin_tutor06.html
3)3D Transformations/1998
http://Pages.infinit.net/jstlouis/3d…ormations.html
4)NEWMAN William M.,SPROUL Robert F.,Principles of Interactive Computer Graphics,Second Edition,New York,1979
5)3D Geometric Transformations/1998
http://acc6.its.brooklyn.cuny.edu/~l…s741/3Dtx.html
6)LEUNG,K.W.,The Generation Of Light Points On Raster Scan Displays,Universty of SUSSEX,1989
7)ÖZEL Galip,Turbo Pascal 6.0(Bios,Dos.Grafik,Object),Beta,1.Basım,İstanbul,1993
EK-1
Hazırlamış olduğum program, kafes görünümünde olan bir uzay mekiğini üç boyutlu olarak, döndürme(üç eksende), ölçeklendirme ve konum değiştirme procedurelerini kullanarak ekranda üç boyutlu bir mekik simülasyonu görüntüsü oluşturmaktadır.
1.1 Program Kodu
{$E+,N+}
uses
{$IFDEF DPMI}
Crt, Dos, Graph, WinAPI;
{$ELSE}
Crt, Dos, Graph;
{$ENDIF}
type
VgaInfoBlock = record
VESASignature: array[0..3] of Byte;
VESAVersion: Word;
OEMStringPtr: Pointer;
Capabilities: array[0..3] of Byte;
VideoModePtr: Pointer;
end;
coordinate =array[1..7]of real;
point=record
x,y,z:real;
end;
linerec=^linetype;
linetype=record
fpoint,tpointoint;
color:byte;
next:linerec;
end;
var
i,VESA16,ErrorCode, GraphDriver ,GraphMode : integer;
MaxColor : word;
OldExitProc : Pointer;
last,firstline:linerec;
xx,yy:real;
x,y:string;
dosya:text;
const
VESA16Modes: array[0..2] of Word =($0102, $0104, $0106);
Function GetHighestCap(Table: Pointer; Modes: Word; Size: Integer): Integer;
near; assembler;
asm
XOR AX,AX
LES DI, Table
@@1:
MOV SI, Modes
ADD SI, Size
ADD SI, Size
MOV BX, ES:[DI]
CMP BX, 0FFFFH
JE @@4
INC DI
INC DI
MOV CX,Size
@@2:
CMP BX,[SI]
JZ @@3
DEC SI
DEC SI
LOOP @@2
@@3:
CMP AX,CX
JA @@1
MOV AX,CX
JMP @@1
@@4:
end;
{$IFDEF DPMI}
type
TRealRegs = record
RealEDI: Longint;
RealESI: Longint;
RealEBP: Longint;
Reserved: Longint;
RealEBX: Longint;
RealEDX: Longint;
RealECX: Longint;
RealEAX: Longint;
RealFlags: Word;
RealES: Word;
RealDS: Word;
RealFS: Word;
RealGS: Word;
RealIP: Word;
RealCS: Word;
RealSP: Word;
RealSS: Word;
end;
function DetectVesa16: Integer; far; assembler;
var
Segment, Selector, VesaCap: Word;
asm
{$IFOPT G+}
PUSH 0000H
PUSH 0100H
{$ELSE}
XOR AX,AX
PUSH AX
INC AH
PUSH AX
{$ENDIF}
CALL GlobalDosAlloc
MOV Segment,DX
MOV Selector,AX
MOV DI,OFFSET RealModeRegs
MOV WORD PTR [DI].TRealRegs.RealSP, 0
MOV WORD PTR [DI].TRealRegs.RealSS, 0
MOV WORD PTR [DI].TRealRegs.RealEAX, 4F00H
MOV WORD PTR [DI].TRealRegs.RealES, DX
MOV WORD PTR [DI].TRealRegs.RealEDI, 0
MOV AX,DS
MOV ES,AX
MOV AX,0300H
MOV BX,0010H
XOR CX,CX
INT 31H
MOV DI,OFFSET RealModeRegs
MOV AX,grError
PUSH AX
CMP WORD PTR [DI].TRealRegs.RealEAX,004FH
JNZ @@Exit
POP AX
MOV ES,Selector
XOR DI,DI
CMP ES:[DI].VgaInfoBlock.VESASignature.Word[0], ‘EV’
JNZ @@Exit
CMP ES:[DI].VgaInfoBlock.VESASignature.Word[2], ‘AS’
JNZ @@Exit
MOV AX,0000
MOV CX,1
INT 31H
MOV VesaCap,AX
MOV DX,ES:[DI].VgaInfoBlock.VideoModePtr.Word[2]
MOV CX,4
XOR AX,AX
@@Convert:
SHL DX,1
RCL AX,1
LOOP @@Convert
ADD DX,ES:[DI].VgaInfoBlock.VideoModePtr.Word[0]
ADC AX,0
MOV CX,AX
MOV BX,VesaCap
MOV AX,0007H
INT 31H
INC AX
XOR CX,CX
MOV DX,0FFFFH
INT 31H
MOV ES,BX
PUSH ES
PUSH DI
{$IFOPT G+}
PUSH OFFSET Vesa16Modes
PUSH 0003H
{$ELSE}
MOV SI, OFFSET Vesa16Modes
PUSH SI
MOV AX, 5
PUSH AX
{$ENDIF}
CALL GetHighestCap
PUSH AX
MOV BX,VesaCap
MOV AX,0001H
INT 31H
@@Exit:
PUSH Selector
CALL GlobalDosFree
POP AX
end;
{$ELSE}
function DetectVesa16: Integer; far; assembler;
var
VesaInfo: array[0..255] of Byte;
asm
MOV AX,SS
MOV ES,AX
LEA DI,VesaInfo
MOV AX,4F00H
INT 10H
CMP AX,004FH
MOV AX,grError
JNZ @@Exit
CMP ES:[DI].VgaInfoBlock.VESASignature.Word[0], ‘EV’
JNZ @@Exit
CMP ES:[DI].VgaInfoBlock.VESASignature.Word[2], ‘AS’
JNZ @@Exit
LES DI,ES:[DI].VgaInfoBlock.VideoModePtr
PUSH ES
PUSH DI
MOV AX, OFFSET Vesa16Modes
PUSH AX
MOV AX,3
PUSH AX
CALL GetHighestCap
@@Exit:
end;
{$ENDIF}
{$F+}
procedure MyExitProc;
begin
ExitProc := OldExitProc;
CloseGraph;
end;
{$F-}
procedure Initialize;
var
InGraphicsMode : boolean;
begin
DirectVideo := False;
OldExitProc := ExitProc;
ExitProc := @MyExitProc;
repeat
VESA16 := InstallUserDriver(’VESA16′, @DetectVESA16);
{$IFDEF Use8514}
GraphDriver := IBM8514;
GraphMode := IBM8514Hi;
{$ELSE}
GraphDriver := Detect;
{$ENDIF}
InitGraph(GraphDriver, GraphMode, ”);
until ErrorCode = grOK;
end;
function degtrad(deg:real):real;
begin
degtrad:=deg*0.017453229252;
end;
procedure convertpoint(P:POINT; var x,y:integer);
var
dx,dy:real;
begin
dx:=(p.x);
dy:=(p.y);
x:=round(dx);
y:=round(dy);
end;
procedure drawline(lrec:linerec);
var
fx,fy,tx,ty:integer;
begin
setcolor(lrec^.color);
convertpoint(lrec^.fpoint,fx,fy);
convertpoint(lrec^.tpoint,tx,ty);
line(fx+640,512-fy,640+tx,512-ty);
end;
procedure showline;
var
lp:linerec;
begin
cleardevice;
lp:=firstline;
while lp<>nil do
begin
drawline(lp);
lp:=lp^.next;
end;
end;
procedure error(err:byte;s:string);
begin
clrscr;
writeln;
case err of
1:writeln(’file:’,s,’not found’);
2:writeln(s,’isn”t a 3d file’);
3:writeln(’err in line’,s);
4:writeln(’no one was indicated’);
end;