Yazan : Şadi Evren ŞEKER
Bilgisayar grafiklerinde bir şeklin dönüştürülmesi sırasında aşağıdaki 3 işlemden birisi yapılabilir:
içerik
3 boyutlu uzayda şekil taşıma
3 boyutlu uzayda şekil döndürme
Eksene paralel doğru etrafında şekil döndürme
Eksene paralel olmayan doğru etrafında şekil döndürme
3 boyutlu şekil ölçekleme
- Taşıma (Translation)
- Döndürme (Rotation)
- Ölçekleme (Scaling)
Yukarıdaki bu işlemlerin 2 boyutlu şekil dönüşümlerinin (2D Transformations) yanında 3 boyutlu olarak işlenmesi de mümkündür. Bu yazının amacı yukarıda listelenen işlemlerin sırasıyla anlatılmasıdır.
Şekil taşıma işlemi basitçe bir şekli oluşturan noktaların değerlerinin belirli bir x,y ve z boyutu değişimine tabi tutulması olarak düşünülebilir. Bu durumu basit bir nokta ile anlayabiliriz. Örneğin (x,y,z) değerlerine sahip bir noktanın taşınması demek aslında noktanın (x+tx,y+ty,z+tz) koordinatlarında kodlanması demektir. Buradaki tx,ty ve tz değerleri taşıma işlemi sırasındaki yer değiştirme miktarlarıdır ve taşıma işleminin yönüne göre eksi değer alabilirler.
Yukarıdaki şekilde P noktası P’ noktasına taşınmıştır. Bu işlem için homojen koordinat sistemi (homogenous coordinate system) kullanılacak olursa noktalarımızı aşağıdaki şekilde gösterebiliriz:
Yukarıdaki vektör (yöney) gösterimlerindeki 1 değerleri homojen koordinat sisteminden gelen değerdir. Ayrıca yukarıdaki x,y,z değerlerini 3 boyutlu kartezyen uzayda (cartesian space) bir nokta belirlemek için kullanılan değerler olarak düşünmek mümkündür.
Yukarıdaki iki nokta arasındaki dönüşüm işlemi için aşağıdaki dönüşüm masfufunu (matrix) kullanmak mümkündür.
Yukarıdaki dönüşüm masfufunu kullanarak P’ = T P masfuf çarpımını yapmak mümkündür.
3 boyutlu uzayda şekil döndürme
Döndürme (rotation) işlemi taşıma (translation) işlemine benzer şekilde bir nesnenin bir doğru etrafında dönemsidir. Temel döndürme işlemleri eksen etrafında yapılan işlemlerdir. Örneğin aşağıdaki şekilde görüntülenen z ekseni etrafında döndürme işlemini inceleyelim:
Yukarıdaki şekilde görüntülenen döndürme aslında 2 boyutlu döndürme (2d rotation) olarak düşünülebilir çünkü döndürme işlemi sırasında sadece şeklin x ve y değerlerinde değişikli olacak z değeri sabit kalacaktır. 3 boyutlu döndürmenin 2 boyuttan tek farkı ise şekli oluşturan noktaların 3 boyutlu olması dolayısıyla da x,y ve z değerlerine sahip olmasıdır.
Bu durumda bir noktanın döndürülmeden önceki ve döndürüldükten sonraki değerlerini aşağıdaki şekilde gösterecek olursak:
Bu noktalar arasındaki geçişi formüllediğimizde:
x’= x cosθ – y sinθ
y’= x sinθ + y cosθ
z’ = z
şeklinde gösterebiliriz. Yani bir noktanın orjin (ordinat) merkez alınarak z ekseni etrafında döndürülmesi işlemi sonucunda oluşan yeni nokta değerleri 2 boyutlu şekil dönüşümüne benzer şekilde yukarıda verilen formülden hespalanabilir.
Bu formülü bir dönüşüm masfufa indirgemek gerekirse aşağıdaki şekilde bir masfuf elde edilir:
Yukarıdaki masfuf kullanılarak P’ = T P çarpımı sonucunda istenilen denklemler elde edilmiş olur. Döndürme işlemi z ekseni etrafında yapılabileceği gibi y ve x eksenleri etrafında da yapılabilir.
Yukarıdaki şekillerde gösterilen bu döndürme işlemleri için aşağıdaki masfuflar (matrices) kullanılabilir:
Yukarıdaki denklemler ve masfuflar sırasıyla x ve y eksenleri etrafında yapılan döndürme işlemleridir.
Eksene paralel doğru etrafında döndürme
Yukarıdaki bölümde açıklanan bir eksen etrafında döndürme işlemine benzer olarak bir doğru etrafında da döndürme işlemi gerekebilir. Bu durumda şayet doğru bir eksene paralelse, döndürme işlemi basit bir taşıma işlemi ilave edilerek eksen etrafında döndürme işlemiyle çözülebilir.
Yukarıdaki şekilde x eksenine paralel bir doğru etrafında döndürme işlemi tasvir edilmiştir. Bu durumda doğruyu eksene taşımak ve benzer şekilde şekli de eksene taşıma ve döndürmek sonra da geri taşımak bir çözüm olur.
P’ = T-1 . Rx(θ) . T. P
Yukarıda verilen bu dönüşüm işlemleri sırasıyla yapılırsa, yani P noktası önce taşınırsa (T) sonra x ekseni etrafında döndürülürse (Rx(θ)) ve sonra eski yerine taşınırsa (T-1) şekil aslında eksene paralel olan bu doğru etrafında döndürülmüş olur.
Eksene paralel olmayan doğru etrafında şekil döndürme
Yukarıdaki bölümde anlatıldığı gibi her zaman bir doğru eksene paralel olmayabilir. Bu durumda eksene paralel olmayan bir doğru için önce etrafında döndürme yapılacak doğrunun eksenlerden birisine paralel hale getirilmesi gerekir.
Örneğin yukarıdaki şekilde, herhangi bir eksene paralel olmayan bir doğru etrafında şeklimizi döndürmek isteyelim.
Bu işlem 5 adımda gerçekleştirilebilir:
- Doğrunun merkezden geçecek şekilde taşınması
- Doğrunun eksenlerden birisine paralel halde döndürülmesi
- Şeklin eksen etrafında döndürülmesi
- Doğrunun eski eğimine döndürülmesi
- Doğrunun merkezden eski yerine taşınması
Yukarıda sıralandığı üzere nokta (veya şekli oluşturan noktalar) sırasıyla 5 dönüştürme işlemine tabi tutulur ve sonuçta şekil verilen doğru etrafında döndürülmüş olur.
Bir şeklin ölçeklenmesi, şekli oluşturan noktaların x,y ve z değerlerinin belirli bir katsayı ile çarpılması ile mümkündür. Bu işlem sırasında şekil hem yer değiştirmekte hem de şekli oluşturan noktalar birbirinden uzaklaşıp yaklaştığı için şekil büyümekte veya küçülmektedir.
Yukarıdaki şekilde de görülen bu durum için aşağıdaki dönüşüm masfufu kullanılabilir:
Yukarıda verilen bu masfuf ile bir nokta aşağıdaki şekilde çarpıldığında elde edilen yeni P’ noktası merkeze göre verilen değerlerde ölçeklenmiş bir noktadır:
P’ = T P