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