Görünmeyen Yüzeylerin Kaldırılması

advertisement
KARADENİZ TEKNİK ÜNİVERSİTESİ
Bilgisayar Mühendisliği Bölümü
Bilgisayar Grafikleri Laboratuarı
GÖRÜNMEYEN YÜZEYLERİN KALDIRILMASI
Bilgisayar grafiklerinin en önemli problemlerinden biri katı nesnelerin görünmeyen yüzeylerinin
kaldırılmasıdır. Görünmeyen yüzeylerin kaldırılması, belli bir bakış noktasından bakıldığında görüntü
düzlemindeki herhangi bir piksele karşılık gelen (yani bakış noktasından başlayıp o pikselden geçen bir doğru
boyunca doğrunun kestiği) yüzeylerden en yakın olanını belirleme (diğerlerini kaldırma) işlemidir.
Günümüze kadar görünmeyen yüzeylerin kaldırılması için bir çok yöntem geliştirilmiştir. Bu deneyde
Işın İzleme (Ray Tracing) yöntemi incelenecektir. Deneyde birincil ışınların nasıl üretildiği, ışın-yüzey
kesişim testi sonucu bakış noktasından 3B nesnelere olan t uzaklıklarının hesaplanması, ışın-üçgen kesişim
testi sonucu görünmeyen yüzeylerin kaldırılması ve ayrıca yansıma ile görünen yüzeylerin belirlenmesi,
arkayüz kaldırma (backface culling) konuları incelenecektir.
1. Işın İzleme Yöntemine Genel Bir Bakış
Işın izleme yöntemi ışının fiziksel davranışları üzerine kurulmuştur. Etrafımızdaki nesneleri ışık
kaynağından saçılan ışınların onlardan yansıyarak/kırılarak gözümüze ulaşmasıyla görmekteyiz. Işın izleme
yöntemi ile görüntü üretiminde tamamen bu fiziksel gerçekler modellenmeye çalışılır. Işın izleme yöntemi ile
oldukça kaliteli 3B görüntüler üretmek mümkündür.
Işın izlemenin ilk adımı, Şekil 2 den görüldüğü gibi bakış noktasından görüntü düzlemindeki her bir
pikselden geçecek şekilde yollanan Birincil Işınlar’ın (Primary Rays) üretimidir. Her bir pikselden geçen
birincil ışınlar 3B nesnelerin özelliklerine bağlı olarak soğurulur veya yansıyarak/kırılarak yoluna devam eder.
Herhangi bir birincil ışının geçtiği pikselin RGB renk değerleri hesaplanırken ışının kesiştiği nesnelerin, varsa
yansıyıp/kırılıp kesiştiği nesnelerin özellikleri, ışık kaynağının ve bakış noktasının konumuna göre belli bir
aydınlatma modeli (örneğin Phong) kullanılarak belirlenir. Bu deneyde ışın izlemenin sadece görünmeyen
yüzeyleri kaldırma ve yansıma ile görünen yüzeyleri modelleme kısmı anlatılacaktır.
Bakış noktasından çıkan ışınların çarptığı nesneler bilgisayarda modellenirken poligonlar kullanılır.
Yani nesneler poligonlara parçalanır. Yaygın olarak kullanılan poligon türü üçgendir. Işın izlemede temel
işlem birincil ışınların hangi üçgenlerle kesiştiğinin belirlenmesidir. Bunun nasıl yapıldığı Işın-Üçgen Kesişim
Testi konusunda anlatılacaktır. Işın izlemeyle görünmeyen yüzeylerin kaldırılması kesişim testleri sırasında
olur. Bakış noktasından yollanan birincil ışınlar ile görüntüyü oluşturacak nesnelere ait üçgenler arasında
yapılan kesişim testlerinde hesaplanan t uzaklıkları sıralanır. Bu sıralamadaki ilk üçgen görünen yüzey olarak
alınır ve diğerleri görünmediği için kaldırılır.
2. Işının Tanımı ve Birincil Işınların Üretilmesi
Işın izleme yönteminin temel bileşeni olan ışın, başlangıç noktası ve doğrultusu olan vektörel bir
büyüklüktür. Başlangıç noktası Ro dan çıkan ve Rd doğrultusu boyunca ilerleyen R ışınını aşağıdaki gibi ifade
etmek mümkündür:
R = Ro + t*Rd
t>0
(1)
(1) ifadesinde R, ışının Ro dan t birim sonraki yerini gösterir. Yani t, R ile Ro arasındaki uzaklıktır.
Farklı t değerleri için R ışınının Rd doğrultusu boyunca nasıl hareket ettiği Şekil 1 de gösterilmiştir. t değerinin
nasıl hesaplandığı Kesişim Testleri konusunda anlatılacaktır. t değerinin sayısal olarak tam anlamıyla R ile Ro
arasındaki uzaklık olabilmesi için ışının doğrultusu olan Rd ‘nin uzunluğunun 1 birim olması yani birim vektör
olması gerekir. Işın ifadesinde Ro ya eklenen t*Rd çarpımındaki t, R ile Ro arasındaki uzaklık olduğuna göre
Rd ‘nin boyu 1 olmalı ki Rd boyunca t birim kadar gidildiğinde tam olarak R ‘nin konumu elde edilsin. Bunun
için de Rd normalize ( ||Rd||=1 yapma işlemi) edilmelidir.
Bakış noktasından yollanan ve görüntü düzlemindeki piksellerden geçen birincil ışınların üretilmesi
için ışının Ro başlangıç noktası ve Rd doğrultusunun bilinmesi yeterlidir. Ro zaten biliniyor. Rd nin
hesaplanması için (1) ifadesi Rd ‘ye göre düzenlenirse aşağıdaki ifade elde edilir:
Şekil 1. Farklı t değerleri için R ışınının Rd doğrultusu boyunca hareketi
Rd = ( R – Ro) / t
(2)
(2) ifadesinden de görüldüğü gibi birincil ışının doğrultusunu bulmak için 3B uzayda iki noktaya ihtiyaç
vardır. Bunlardan birincisi Ro= [ 0 0 0 ] olan bakış noktasıdır. İkinci nokta yani R ise pikselin koordinatlarıdır.
İlk pikselden geçen ışın için R, Şekil 2 den de görüldüğü gibi [ -4 4 5 ] noktasıdır. Birincil ışınlar için t değeri
yani Ro ile R arasındaki uzaklık bulunurken R nin koordinatlarının kareleri toplamının karekökünü almak
yeterlidir. Çünkü Ro= [ 0 0 0 ] dır. Buradan t = sqrt(-42+42+52) ≅ 7.55 olarak bulunur. R, Ro ve t değerleri (2)
ifadesinde yerine koyulursa Rd aşağıdaki gibi hesaplanır:
Rd = [ -4/7.55 4/7.55 5/7.55 ] = [ -0.529 0.529 0.662 ]
(3)
(3) ifadesindeki sayısal değerlere dikkat edilirse (2) ifadesindeki (R – Ro) ‘nun t ‘ye bölünmesi aynı
zamanda Rd ‘nin de normalize edilmiş (birim vektör yapılmış) halini verir. (3) ifadesinde Rd ‘nin bileşenlerinin
karelerinin toplamının karekökü yani Rd ‘nin boyu :
|| Rd || =
(-0.529) * (-0.529) + (0.529) * (0.529) + (0.662) * (0.662) = 1 dir.
Rd ‘nin bulunmasıyla ilk birincil ışın üretilmiş olur. 3B nesnelerin üçgenlerden oluştuğu varsayılırsa
kesişim testlerinde birincil ışınlara ait Ro, Rd değerleri ve üçgenlerin köşe noktalarının koordinatları
kullanılarak t değerleri yani üçgenlere olan uzaklıklar hesaplanır.
Görüldüğü gibi aslında birincil ışının doğrultusu Rd yi hesaplamak için t değerinin bilinmesi gerekli
değildir. Rd için piksel koordinatları ile bakış noktasının koordinatlarının farkını alıp normalize etmek ((R – Ro)
fark vektörünün x, y, z değerlerini, x, y, z değerlerinin kareleri toplamının kareköküne ayrı ayrı bölmek)
yeterlidir.
Şekil 2. Birincil Işınlar
Şekilde 2 de üretilecek görüntünün çözünürlüğü 8x8, görüntü düzlemi 8x8 birim alınmıştır. Böylece
piksel koordinatları tamsayı değerler almıştır. Eğer üretilecek görüntü 640x480 lik çözünürlükte olsaydı 8x8
birimlik görüntü düzleminde piksel koordinatları (8*x/640 - 4, 4 - 8*y/480, 5) olurdu.
2
3. Vektörel İşlemler
Işın izleme yönteminde vektörel bir büyüklük olan ışının davranışları incelendiğinden bazı önemli
vektörel işlemlerin bilinmesi gerekmektedir.
3.1. Vektörel Çarpım (Cross Product)
Vektörel çarpımı x sembolüyle gösterirsek R1 ve R2 vektörlerinin (vektörler için kullanılan semboller
koyu harfle yazılmıştır) vektörel çarpımı olan R vektörü aşağıdaki gibi hesaplanır:
R = R1 x R2 = [ R1yR2z - R1zR2y
R1zR2x - R1xR2z
R1xR2y – R1yR2x ]
Vektörel çarpım ışın izlemede çok kullanılır. Çünkü yüzey normali vektörel çarpımla
hesaplanmaktadır. Yansıyan ışının doğrultusu hesaplanırken yüzeyin normalini, yani yüzeye dik olan vektörü
bilmek gerekir. Ayrıca aydınlatma modelinin diffuse ve specular bileşenleri hesaplanırken de yüzey
normalinden faydalanılır. Şekil 3 te köşe noktaları V0, V1 ve V2 olan üçgenin yüzey normalinin vektörel
çarpımla nasıl hesaplandığı gösterilmiştir:
Şekil 3 Yüzey normalinin hesaplanışı
3.2. Skaler Çarpım
İki vektörün skaler çarpımı yapılırken karşılıklı olarak x, y ve z bileşenleri çarpılır ve bu çarpımlar
toplanarak tek bir değer elde edilir. Skaler çarpımı * sembolü ile göstereceğiz. R1 ve R2 vektörlerinin skaler
çarpımı olan D’ nin nasıl hesaplandığı aşağıda verilmiştir:
D = R1 * R2 = R1xR2x + R1yR2y + R1zR2z
İki birim vektörün skaler çarpımı aralarındaki açının kosinüsünü verir. Aydınlatma modelinin diffuse ve
specular bileşenleri hesaplanırken bu özellikten faydalanılır.
4. Perspektif İzdüşüm
3B nesneler perspektif izdüşüm ile görüntü düzlemine izdüşürülür. Işın izleme ile 3B görüntü üretmek
için perspektif izdüşüm yapmak şart değildir. Yalnız bu deneyde anlatılacak basit ışın-üçgen testi ve arkayüz
kaldırma için perspektif izdüşüm gereklidir.
P(xv,yv,zv) noktasının perspektif izdüşümü olan P’(xs,ys) hesaplanırken P noktasının z bileşeninden
faydalanılır. Benzer üçgenler özelliği kullanılarak ys ‘in nasıl hesaplanacağı Şekil 4 te gösterilmiştir. xs de
benzer şekilde hesaplandığından ayrıca bir şekil çizmeye gerek duyulmamıştır. Şekilde bakış noktasının
görüntü düzlemine uzaklığı d ile gösterilmiştir.
3
Şekil 4. Perspektif izdüşüm
5. Kesişim Testleri
Işın izleme yöntemiyle görüntü üretiminde hesaplama süresinin çoğu kesişim testlerine
harcanmaktadır. Test süresini azaltılmak için çeşitli algoritmalar geliştirilmiştir. Algoritmaların çoğu öncelikle
ışının, üçgenin üzerinde bulunduğu yüzeyle kesişip kesişmediğini test eder. Eğer ışın yüzeyden geçiyorsa
kesişim noktasının üçgenin içinde olup olmadığı test edilir. O nedenle önce ışın-yüzey kesişim testi ve
ardından da ışın-üçgen kesişim testi anlatılacaktır.
5.1. Işın-Yüzey Kesişim Testi
(0,0,0) noktasından uzaklığı D olan Pn =[A B C] normaline sahip bir P yüzeyinin denklemi aşağıdaki
gibi verilebilir.
Ax + By + Cz + D = 0
Kesişim testinden önce yüzeyin A, B, C ve D bileşenlerinin nasıl hesaplandığına bakalım. 3B uzayda
bir yüzeyin tanımlanabilmesi için o yüzeyin üzerindeki en az 3 noktanın bilinmesi gerekir. Öyleyse bir
üçgenin köşe noktaları biliniyorsa onun üzerinde oturduğu düzlemin denklemini belirlemek mümkündür.
Bunu bir örnekle açıklayalım:
ÖRNEK:
Yüzey denklemini belirleyeceğimiz üçgenin köşe noktaları V0 = (1,2,4), V1 = (3,3,4), V2 = (4,1,4)
olsunlar.
Yüzey normali Pn = [A B C] = (V1 - V0)x( V2 - V0 ) vektörel çarpımından Pn = [ 0, 0, -5 ] olarak bulunur.
Yukarıdaki üç köşe noktası da yüzey denklemini sağlayacağından bunlardan V0’ ı kullanarak D değeri
aşağıdaki gibi hesaplanabilir:
0*1 + 0*2 + (-5)*4 + D = 0
D = 20
Sonuç olarak düzlem Ax + By + Cz + D = 0 ifadesinden
0*x + 0*y + (-5)*z + 20 = 0 Æ z - 4 = 0 ya da z=4 yüzeyi olarak bulunur.
Işın ifadesinin R = Ro + t*Rd olduğunu biliyoruz. Eğer ışın yüzeyle kesişiyorsa kesişim noktası için
R ışınının x, y, z değerleri ile P yüzeyinin o noktadaki x, y, z değerleri aynı olmalıdır. Buradan şöyle
yazabiliriz:
A( X0 + tXd) + B( Y0 + tYd) + C( Z0 + tZd) + D = 0
4
İfade t ‘ye göre düzenlenirse başlangıç noktasıyla kesişim noktası arasındaki uzaklık değeri olan t için
aşağıdaki ifade elde edilmiş olur:
t = - ( AX0 + BY0 + CZ0 + D ) / (AXd + BYd + CZd ). t ‘nin vektörel gösterimi şöyledir:
t = -( Pn * Ro + D ) / (Pn * Rd). Bu ifadede:
Pn * Rd = 0 ise ışın yüzeye paraleldir.
t < 0 ise kesişim noktası ışının başlangıç noktasından geridedir. Yani gerçekte görünen bir kesişim
yoktur. t > 0 için kesişim vardır ve kesişim noktası Ri aşağıdaki gibi hesaplanır:
Ri = [ xi yi zi ] = [ X0 + tXd
Y0 + tYd
Z0 + tZd ]
ÖRNEK:
P = [ 1 0 0 -7 ] olsun. ( x = 7 yüzeyi )
Işının başlangıç noktası Ro= [ 2 3 4 ] olsun.
Işının doğrultusu Rd = [ 0.577 0.577 0.577 ] olsun.
t = 5 / 0.577 = 8.66 > 0
xi = 2 + 0.577 * 8.66 = 7
yi = 3 + 0.577 * 8.66 = 8
zi = 4 + 0.577 * 8.66 = 9
Ri = [ 7 8 9 ] olarak bulunur.
5.2. Işın-Üçgen Kesişim Testi
Işın-üçgen kesişim testi için bir çok yöntem geliştirilmiştir. En basit yöntem alan testidir. Bu yönteme
göre önce ışın ve üçgene ait yüzeyin görüntü düzlemine perspektif izdüşümleri alınır. Ardından ışın-yüzey
kesişim testi yapılır. Işın yüzeyle kesişiyorsa kesişim noktasının üçgenin içinde olup olmadığının belirlenmesi
için kesişim noktasıyla üçgenin köşelerinden ikişer tane alınarak 3 tane alt üçgen belirlenir ve bunların
alanları hesaplanır. Hesaplanan bu alan değerleri toplanır. Toplam alan değeri kesişim testi yapılan üçgenin
alanına eşit oluyorsa (ya da çok yakınsa) ışın üçgenin içindedir. Aksi halde dışındadır. Şekil 5 te alan testinin
nasıl yapıldığı ve köşe noktaları A, B ve C olan üçgenin alanının nasıl hesaplandığı gösterilmiştir.
Şekil 5. Alan testi ve üçgenin alan hesabı.
Görünmeyen yüzeylerin kaldırılması işlemi de bu kesişim testleri sırasında olur. Işın ile görüntüyü
oluşturacak bütün üçgenler arasında kesişim testi yapılır. Kesişen üçgenler ışının o doğrultusu boyunca art
arda geliyor demektir. Bu üçgenler için hesaplanan t değerleri sıralanır. En küçük t değerine sahip üçgen en
yakın üçgen demektir. Diğerleri görünmeyen yüzeylerdir ve kaldırılır. Yansıyan ışınlar için de bu işlemler
tekrarlanır.
Aşağıda ışın izleme ile görünmeyen yüzeylerin kaldırılması için örnek bir soru ve çözümü verilmiştir:
5
Şekil 6. Örnek Soru
SORU (2004 FİNAL): Şekil 6 dan da görüldüğü gibi bakış noktası (0,0,0) dan çıkan ve 12x12 birimlik görüntü
düzleminde (0,6,8) noktasından geçen R ışını T veya V üçgeniyle kesişmektedir. Kesişim noktası için
görüntü düzleminde ışının geçtiği pikselde T veya V üçgenlerinden birinin görüntüsü görülmektedir. Işın
izleme yöntemiyle görünmeyen yüzeyleri kaldırarak bu üçgenin hangi üçgen olduğunu bulunuz. Işın ile
üçgenlerin tanımladığı yüzey arasındaki kesişim noktaları aynı zamanda üçgenlerin içindedir. Üçgenlerin
köşe noktalarının koordinatları aşağıda verilmiştir:
T0 = ( -20, 40, 40 )
T1 = ( 20, 40, 40 )
T2 = ( 0, -10, 40 )
V0 = ( -50, 40, 30 )
V1 = ( 50, 40, 30 )
V2 = ( 0, 0, 60 )
ÇÖZÜM: Soruda ışın ile üçgenlerin üzerinde bulunduğu yüzey arasındaki kesişim noktaları aynı zamanda
üçgenlerin içinde olduğu söylendiği için ışın-üçgen kesişim noktasının koordinatlarını hesaplarken yalnızca
ışın-(üçgen üzerindeki yüzey) kesişim testi yapmak yeterlidir.
Sorunun çözümü için yapılması gereken işlemler şunlardır:
1. Birincil ışının doğrultusunu bul.
2. Başlangıç noktası ve doğrultusu hesaplanmış ışının T ve V üçgenlerine uzaklıkları olan tT ve tV ‘yi
hesapla.
3. Hesaplanan t değerlerini sırala. En küçük t değerine sahip üçgen ışının geçtiği pikselde görünen
üçgendir.
1. Işının doğrultusu Rd için (R – Ro) fark vektörünü normalize etmek yeterlidir. Buradan;
Rd = ( 0/sqrt(02+62+82), 6/sqrt(02+62+82), 8/sqrt(02+62+82) ) = ( 0, 0.6, 0.8 ) olarak hesaplanır.
2.
(T1 – T0 ) = ( 40, 0, 0)
(T2 – T0 ) = ( 20, -50, 0)
PT = (T1 – T0 ) x (T2 – T0 ) = (0, 0, -2000) ve DT = -80000.
(V1 – V0 ) = (100, 0, 0)
(V2 – V0 ) = (50, -40, 30)
PV= (V1 – V0 ) x (V2 – V0 ) = (0, 3000, 4000) ve DV= -240000.
tT = - (-80000) / (1600) = 50
tV = - (-240000) / (0.6 * 3000 + 0.8 * 4000 ) = 48
3. t değerleri sıralanırsa 48 < 50 yani tV < tT olur. Bu sonuçtan anlaşılıyor ki bakış noktası olan (0,0,0)
‘dan çıkan ve görüntü düzleminde (0,6,8) noktasından geçen R ışını ilk olarak V üçgeniyle kesişmekte
yani ilgili piksele V üçgeninin görüntüsü düşmektedir.
6
6. Yansıma
Işın izlemede herhangi bir pikselin renk değeri hesaplanırken yansıyan ışının çarptığı yüzeyin rengi de
hesaba katılır. O nedenle yansıtıcı özelliği olan yüzeyler için yansıyan ışının doğrultusu hesaplanmalıdır.
Yansıyan ışının doğrultusunun hesaplanmasında yüzey normali kullanılır. Gelen ışın ile yansıyan ışının yüzey
normaliyle yaptığı açı aynı ise buna aynasal yansıma denir. Aynasal yansıma Şekil 7 de gösterilmiştir.
Burada yansıyan RI ışınının, her biri birim vektör olan gelen ışının doğrultusu I ve yüzey normali N cinsinden
vektörel ifadesi verilmiştir. –(I*N)*N ifadesi gelen ışın I ’ nın tersi –I ’nın yüzey normaliyle skaler çarpımının
tekrar yüzey normaliyle çarpımını yani –I nın yüzey normali üzerine izdüşümünü verir. Ardından ikinci
şekilden de görüldüğü gibi bu ifadenin 2 katı alınıp I ile toplandığında yansıyan ışın olan RI nın, gelen ışın I ve
yüzey normali cinsinden ifadesi elde edilmiş olur.
Şekil 7. Yansıyan ışının doğrultusunun hesaplanması.
7. Arkayüz Kaldırma (Backface Culling)
Görünmeyen yüzeylerin kaldırılması ile ilgili konulardan biri de arkayüz kaldırmadır. Bakış noktasından
bakıldığında görülmesi imkansız olan yani gözlemciye ters olan yüzeylere arkayüz (backface) denir. Örneğin
önümüzde karton bir kutu olsun. Normalde bu kutunun 6 yüzeyinden bakış noktasına bağlı olarak ancak 2
veya 3 yüzeyini görmek mümkündür. Diğer yüzeyler gözlemciye bakmamaktadır. İşte gözlemcinin
görmesinin imkansız olduğu bu yüzeyleri belirleyip kaldırma işlemine arkayüz kaldırma denir. Binlerce
üçgenden oluşan 3B nesneler için normalde bakış noktasından görünmesi imkansız olan üçgenler kesişim
testleri öncesi belirlenip kaldırılırsa testlere harcanan zaman oldukça azalır.
Arkayüz kaldırmada yaygın olarak kullanılan 2 yöntem vardır. Her ikisi de arkayüz kaldırma için yüzey
normalini kullanır.
7.1. Vektörel Çarpımla Arkayüz Kaldırma
Bu yönteme göre öncelikle üçgenin görüntü düzlemine perspektif izdüşümü alınır. İzdüşümü alınmış
üçgenin normali hesaplanır.
Eğer üçgen normalinin z bileşeni sıfırdan büyükse o üçgen arkayüzdür.
Eğer üçgen normalinin z bileşeni sıfırdan küçükse o üçgen önyüzdür.
Burada dikkat edilmesi gereken çok önemli bir incelik vardır Æ Hesaplanan normalin z bileşenine göre
üçgenin arkayüz olup olmadığına karar verebilmek için üçgenin köşe noktalarının sırasına dikkat edilmelidir.
Yukarıda verilen arkayüz kaldırma şartı Şekil 8 den de görüldüğü gibi üçgenin köşeleri saat yönü sırada
(Clock Wise - CW) alındığı ve +z ekseni bakış noktasından görüntü düzlemine doğru olduğu durumda (sol el
kuralı) geçerlidir. Bu durumda görüntü düzlemindeki üçgenin normali önyüz için bakış noktasına bakar. Eğer
köşeler saat yönünün tersi sırada (Counter Clock Wise - CCW) seçilirse bu sefer bakış noktasından görüntü
düzlemine doğru olan eksen –z eksenidir ve üçgen normalinin z bileşeni sıfırdan küçükse arkayüz olur.
7
Şekil 8. Vektörel çarpımla arkayüz kaldırma
7.2. Skaler Çarpımla Arkayüz Kaldırma
Bu yönteme göre yüzey üzerindeki kesişim noktasından bakış noktasına doğru olan birim vektör
belirlenir. Bu vektörle yine birim vektör olan yüzey normalinin skaler çarpımı yapılır. Yüzey normali ile bakış
noktasına olan vektörler birim vektör olduklarından bu vektörlerin skaler çarpımı aralarındaki açının
kosinüsünü verir. Eğer açı π/2 ‘den büyükse skaler çarpım negatif çıkar. Buradan yüzeyin arkayüz olduğu
anlaşılır. Pozitif değerler için yüzey bakış noktasından görünür yani önyüz (frontface) dür. Şekil 9 da bu
yönteme göre arkayüz kaldırma gösterilmiştir.
Şekil 9. Skaler çarpımla arkayüz kaldırma
8. Deneye Hazırlık
(2006 Final Sorusu)
Bakış noktası R0=(0,0,0) dan çıkan ve Rd=(0,0,1) doğrultusu
boyunca giden R ışını kırmızı renkli T, mavi renkli U ve yeşil
renkli V üçgeniyle kesişmektedir. Işının geçtiği pikselde T, U veya
V üçgenlerinden birinin rengi görüntülenmektedir. Işın izleme
yöntemiyle görünmeyen yüzeyleri kaldırarak bu üçgenin hangi
üçgen olduğunu bulunuz.
Üçgenler aynı normallere sahip olup normaller
NT,U,V =(0, 0.6, -0.8) dir. Işın ile üçgenlerin tanımladığı yüzeyler
arasındaki kesişim noktaları üçgenlerin içinde olduğundan uzaklık
hesabı için ışın-yüzey kesişim testi yapılması yeterlidir. Üçgenlerin
köşe noktalarının koordinatları aşağıda verilmiştir:
T = ( -30, 40, 85,
U = ( -30, 40, 90,
V = ( -30, 40, 80,
30, 40, 85,
30, 40, 90,
30, 40, 80,
0, -40, 25 )
0, -40, 30 )
0, -40, 20 )
8
9. Deneyin Yapılışı
1.(2005_FİNAL) Yandaki şekilde görüldüğü gibi Ro=(0,0,0) bakış
noktasından çıkan ve görüntü düzleminin merkezinden geçen
Rd =(0,0,1) doğrultulu R ışını, NP=(0, 0.6, -0.8) normaline sahip
P üçgeninden aynasal yansıyarak kırmızı renkli R, yeşil renkli
S ve mavi renkli T üçgenleriyle kesişmektedir. Böylece ışının
geçtiği pikselde P üçgeni üzerinde R,S ve T üçgenlerinden
birinin yansıması görülmektedir. Görünmeyen yüzeyleri
kaldırarak bu üçgeni belirleyiniz. R,S ve T üçgenleri aynı
normallere sahip olup NR,S,T=(0, -0.6, 0.8) dir. Işının üçgenlerle
kesişip kesişmediğini belirlemek için ışın-yüzey kesişim testi
yapmak yeterlidir.
P,R,S ve T üçgenlerinin koordinatları aşağıda verilmiştir.
P
R
S
T
1.köşe
= ( -30, 40, 100,
= ( 30, 180, 80,
= ( 30, 168, 96,
= ( 30, 192, 64,
2.köşe
30, 40, 100,
-30, 180, 80,
-30, 168, 96,
-30, 192, 64,
3.köşe
0, -40, 40),
0, 100, 20),
0, 88, 36),
0, 112, 4),
2. Şekil 10 da verilen görüntüdeki 3B nesnelere ait üçgenlerin koordinatları, birincil ışınların başlangıç
noktası ve doğrultusu verildiğinde alan testi yöntemi ile ışın-üçgen kesişim testi yapan kodu yazınız.
Şekil 10. Işın İzleme yöntemi ile üretilmiş bir görüntü
9
Download