Bu makalenin farklı dillerde bulunduğu adresler: English Castellano Deutsch Francais Russian Turkce |
tarafından Antonio Castro Yazar hakkında: Ben bir bilgisayar uzmanıyım ve birçok Unix türevi ile çalışma şansım oldu.Ayrıca yazılım tasarımından sistem yöneticiliğine kadar pekçok konu ile uğraştım. İçerik: |
Özet:
Bu makalede nasıl kaplama kullanılacağına bakacağız. Daha önceki sayılarda kaplamaları zaten teorik düzeyde anlatmıştık. (I, II, III).
Povray'de bir nesne yaratırken birbirinden farklı iki şey hakkında karar vermeliyiz:
Renk örüntülerini ve yüzeylerin değişik şekilde bitirilmiş formlarının örüntülerini kullanmak konusunda Povray'in çok yönlülüğünü görmüştük, ama dahası da var.
|
Kaplamaların kullanımındaki değişik yöntemleri göstermek için pek çok etmen tanıtıldı. Resim kullanarak yassı, silindirik ve küresel nesneleri kaplamasını öğreneceğiz.
Yeni olasılıkları keşfetmek icin yardım sayfalarına bakmak her zaman kullanışlıdır. Söz konusu durumda başka bir şekil türü de vardır. Bunlar kendi özel fonksiyonlarına sahiptirler. Bu fonksiyonlar, henüz kullanmadığımız ve pek sık kullanılmayan ama önceden bahsi geçen türlerden herhangi biri kadar kullanmasi kolay olan burulmalı(spiral) nesneleri ele alirlar.
Nesneleri resimlerle kaplama tekniğinin çok güçlü olduğuna dikkat edilmelidir. Geniş bir kaplanmış resim repertuarı ile hemen hemen herşey yapılabilir. Kişi, kaplama tekniği olarak hep üçüncü kişilerce yaratılmış resimleri kullanma yoluna gidebilir. Ancak bu şekilde kaplama dizaynı konusunda Povray'in sağladığı yaratıcı esnekliğine sahip olunamaz. Başkalığı sağlayan bağımsız desenler, renk dağılımları, akış çeşitleri akışların yoğunluğu gibi etmenlerdir.
Tarifleri şekillerle destekleyeceğiz. Sahnenin yaratılmasında kullanılan tüm resimleri ve sahnenin pov-kodlarının tamamını buradan tar.gz biçiminde elde edebilirsiniz.
Şimdi ise sahnenin değişik açılarını ve ayrıntılarını anlatacağız.
|
Ana kod-listesinden bir bölüm |
---|
#declare Papel = object { box { <0,0,0,> <1,1,1> } texture { pigment{ image_map { gif "gifs/hoja.gif" } } finish { ambient 0.4 diffuse 0.6 } } rotate x*90 scale <12, 0.001, 20> |
Örnek: Disquete.inc |
#declare TamDisquete = 5; #declare PortadaDisquete = "gifs/disquete1.gif" #include "Disquete.inc" object { Disquete rotate x*90 translate <80, -10, 147> } |
Disquete.inc |
#declare Epsil = 0.0001; #declare Disquete = object { box { <0, 0, 0> <1,1,1> texture { pigment{ image_map { gif PortadaDisquete once } } } translate <-0.5,-0.5,-0.5> } //Primero centrar el cubo en <0,0,0> translate <-0.5, -0.5, -0.5> scale <TamDisquete,TamDisquete, TamDisquete/10 > } // end 'Disquete.inc'; |
Örnek: Libro.inc |
#declare LargoLibro = 20; #declare AnchoLibro = 12; #declare GruesoLibro = 3.5; #declare PortadaLibro = "scan_gif/bookp2.gif" #declare LomoLibro = "scan_gif/bookl2.gif" |
Libro.inc |
#declare Epsil = 0.0001; #declare TextureLibro = texture { pigment { gradient z color_map { [0.0 colour White ] [0.1 colour Gray90 ] [0.2 colour White ] [0.3 colour Gray95 ] [0.4 colour White ] [0.5 colour Gray80 ] [0.6 colour White ] [0.6 colour Gray95 ] [0.8 colour White ] [0.9 colour Gray90 ] [1.0 colour Gray85 ] } // end colourmap; } // end pigment; finish { ambient 0.3 diffuse 0.7 } scale <1, 1, 0.3> } // end Texture; #declare Libro = object { union { box { <0, 0, 0> <1,1,1> texture { TextureLibro } translate <-0.5, -0.5, -0.5> } // Portada del libro; box { <0,0, 0> <1, 1, 1> texture { pigment{ image_map { gif PortadaLibro once } } } translate <-0.5, -0.5, -0.5> scale <1-Epsil, 1-Epsil, 1+Epsil> } // end box; // Lomo del libro; box { <0,0,0 > <1 ,1 ,1 > texture { pigment{ image_map { gif LomoLibro once } } } translate <-0.5, -0.5, -0.5> scale <1-Epsil, 1-Epsil, 1+Epsil> rotate y*90 } // end box; } // end union translate <-0.5, -0.5, -0.5> // Centrar el cubo en <0,0,0>; scale <AnchoLibro,LargoLibro, GruesoLibro> } // end 'Libro.inc'; |
Bu bölümde kutuya benzer tüm şekillerin kaplanmasında çok kullanışlı olan bir yöntemden bahsedeceğiz. Bizim sahnemizde bir sayfa kağıt tamamıyla yassı bir kutu gibi düşünülebilir. Disketler birkac milimetrelik kalınlıkları ile gerçek birer kutu gibi algılanabilir.
Her iki durumda da nesneyi kaplamak için tek bir resim kullanacağız. Hepsinde de yassı nesneler için yansıtma kullanılacaktır. Bir kitap söz konusu olduğunda kapak için bir ve arkası için de başka bir resim kullanacağız. Bu nesnelerin herbirinin yapılanmasını açıklayacağız.
Bir sayfa kağıt için bir küp tanımlamak gerekli değildir. Resim yukarı doğru değil de kameraya doğru yansıtılır (projekte edilir). Küpü x ekseninde 90 derece döndürdük. Böylece resmin geri kalan kısmı yukarı doğru çevrilmiş ve doğru oranlara sahip olmuş oldu. Sayfaya bir kalınlık verdik.
Disketler include ifadesi ile yapılan nesnelerdir. Disketin boyutlarını ve resmini kurmak için parametre olarak kullanacağımız değerlere başlangıç değerlerini vermek gereklidir.
Sol tarafta "Disquete.inc"i liste olarak görebilirsiniz.
Daha cok parametreye gereksinim duyduğumuz için kitap tasarlamak biraz daha karışık hale gelecek.
Kitabın arka yüzeylerini temsil etmek için bir yerden bir yere giderken renk dağılımı olan bir örüntü kullanmamız gerekir.
Kitabı merkezi <0,0,0> olan düzgün bir küreymiş gibi yapılandırarak arzu edilen boyutları veriyoruz. Bu şekilde küpün önüne yerleştirilecek olan arkanın ve kapağın konumunu hesaplamak daha kolay olur. Arka ve kapak sanki çok ince kutularmış gibi birbirine eklenmiş oldu.
|
Epsil'i insan gözü ile görülemeyecek kadar küçük bir büyüklük olarak tanımladık. Aynı zamanda sıfıra bölmeye eş olmayacak ya da değişik neslerin aynı yeri kaplayan yassı yüzeylerinde garip etkilere neden olmayacak kadar büyük tutulmalıdır.
Sol tarafta kitaplar icin kullanılan include dosyasını görüyorsunuz. Her kenarı için ayrı olmak üzere altı resim alan daha genel bir nesne yapılandırılmasını okuyucuya alıştırma olarak bırakıyoruz.
Aşağıda çizgili bazı desenler görüyorsunuz.Bunlar yüzeyin kabartmasını temsil ediyor ve camı, kesme cam gibi dekore etmek için kullanacağız. Resmi, nesnenin değişik noktaları üzerinde normal bileşeni değiştirmek için bir örüntü olarak kullanıyoruz. Daha fazla ayrıntı için resimleri tıklayabilirsiniz.
|
Cam bardak içinde sağ ucu su hizasında biten daha dar başka bir boru olan konik bir boruya benzetilebilir. Yani kristal ve su aynı şey gibi davranır. Böyle olmasının nedeni basitleştirmek için su ve camın aynı kırılma sabitesine sahip olduğunu varsaymamızdır. Sonuç tek bir materiyalin geometrik formudur. Kırılma indislerinin çok yakın olmasından dolayı su ile dolu cam görünmez olduğundan bu çok uygundur.
Su şişesi biraz daha incelikle hazırlanmalı çünkü pek çok basit şeklin (silindirler, borular, küre kesimleri) birleşmesinden oluşur. Ancak bu makale işin bu yönü ile ilgilenmiyor; şimdilik sadece cam bardakta kullanılan yolun biraz daha karmaşığının kullanıldığını söylemekle yetineceğiz.
Bazen hazır bir resim ve povray ile yaratılmış bir örüntü arasında seçim yapma şansına sahip olabiliriz. Uygun bir renk haritası ile duvarlar yumru türünde örüntü kullanarak mükemmel bir şekilde temsil edilebilir.
Kaplamayı köşenin iki duvarı üzerine projekte etmemiz gerektiğinden kaplamayı y eksenine göre 45 derece döndürüyoruz. Bu da ölçekte çarpıklıklara neden olacaktır. Ölçeği kaplamaya uygun olarak düzeltecek olmamızın nedeni budur.
Bu detaylar sahnenin son kod listesinde görülebilir.
Nesneyi yapılandırmak ilk bakışta görüldüğünden daha kolaydır. Diğer örnekte rengi projekte ettik. Ancak yansıtma küresel cisimler için de uygundur. 'map_type 1' fiş(socket) bronz, taban ise ağaç. Povray'in oluşturulmuş kaplama kataloğuna bakarak en çok istediğiniz ağacı seçebilirsiniz.Burada biz 'DMFDarkOak' kullandık.
Her ne kadar evren basit formlarla yapılsa da hangi sırada oluşturulduğunu görmek ilginç. Bilinen şu ki nesneleri herhangi bir sırada birleştirmek aynı şey değildir. Bu örnekte, bölümleri doğru düzgün yerleştirmek için pek çok eksen var.
Tüm bunları sondaki tam kod listesinde görebilirsiniz.
|
Sahnedeki su bardağı, kalem, zemin, masa gibi daha fazla nesne hakkında konuşulabilir. Ancak yeni birşeyler çıkmaz. Sadece masa için, parlaklığını ve yansıtıcılığını sahnede görüldüğü hale getirmek için bir kaplama kullandığımız ve onu işlediğimiz söylenilebilir.
Bir kez tüm elemanlar yerleştirildi mi cose(Common Open Software Environment)a geri dönüp değişik ışıklandırma varyasyonlarını deneme zahmetine katlanmaya değer. Tavan ve merkez arasına yerleştirilmis genel bir aydınlatma kullandık.
Sahnenin son resmine tıklayarak daha parlak ve büyük halini görebilirsiniz.
Makaleyi bitirirken sahnenin kodlarını tam olarak yeniden veriyoruz.
Final Listing Estudio.pov | |
---|---|
//////////////////////////////////////////// // // Autor: Antonio Castro Snurmacher // //////////////////////////////////////////// #include "colors.inc" #include "textures.inc" #include "glass.inc" #declare Plastico = finish { ambient 0.4 diffuse 0.45 reflection 0.15 phong 0.3 phong_size 20 } #declare Camera_pl_general = camera { location <0,45, -20> look_at <80, -20, 200> angle 20 } #declare Camera_detalle_vaso = camera { location <0,45, -20> look_at <97,-6, 170> angle 3.2 } #declare Camera_detalle_botella = camera { location <0,45, -20> look_at <45,0, 190> angle 8 } #declare Camera_detalle_papel = camera { location <0,45, -20> look_at < 85, -10, 145> angle 10 } //camera { Camera_detalle_botella } //camera { Camera_detalle_vaso } //camera { Camera_detalle_papel } camera { Camera_pl_general } // Fuente de luz blanca en el techo light_source { <0, 40, 90> color White } // Fuente de luz tenue de mesa light_source { <0, 40, 190> color White spotlight radius 8 falloff 12 tightness 10 point_at // < 70, -10, 160> < 65, -10, 155> } #declare Cubilete = object { intersection { cylinder { <0,0,0> <0,6,0> 2 } cylinder { <0,1,0> <0,6.5,0> 1.9 inverse } } } #declare GloboTierra = object { union{ union{ sphere { <0,0,0> 1 texture { pigment{ image_map { gif "gifs/geoideok.gif" map_type 1 // Esfera } } finish { Plastico } } interior{ I_Glass} //rotate y*25 rotate y*-25 } cylinder { <0,-1.28, 0> <0, 1.28, 0> 0.1 texture { Bronze_Metal } interior{ I_Glass} } intersection { sphere { <0,0,0> 1.28 } box { <0,-1.5,-0.06> <1.5, 1.5, 0.06> } sphere { <0,0,0> 1.1 inverse } texture { Bronze_Metal } interior{ I_Glass} } rotate z*-20 } union{ // pie cylinder { <0, -1.1, 0> <0, -1.8, 0> 0.15 texture { Bronze_Metal } interior{ I_Glass} } cone { <0, -1.8, 0> 1 <0, -1.6, 0> 0.7 texture { pigment { DMFDarkOak } scale <0.3, 0.3, 0.3> } interior{ I_Glass} } } } translate <0, 1, 0> scale <7,7,7> } #declare VasoAgua = object { intersection { cone { <0, 0, 0> 2.5 <0,7,0> 2.9 } cone { <0, 4, 0> 2.45 <0,7.5,0> 2.8 inverse } } texture { Glass2 normal { bump_map { gif "gifs/vaso_norm.gif" map_type 2 // Clindro bump_size 0.5 } } scale <7,7,7> } interior{ I_Glass} } #declare BotellaAgua = object { union { intersection { merge { cylinder { < 0, 18.1, 0> < 0, 20 , 0> 0.9 } cone { < 0, 14 , 0> 2.9 < 0, 18.1, 0> 0.9 } sphere { < 0, 12.5, 0> 3.3 } cylinder { < 0, 0 , 0> < 0, 12 , 0> 3.2 } } merge { cylinder { < 0, 18 , 0> < 0, 20.1, 0> 0.8 } cone { < 0, 13.9, 0> 2.8 < 0, 18.0, 0> 0.8 } sphere { < 0, 12.4, 0> 3.2 } cylinder { < 0, 6 , 0> < 0, 12.5, 0> 3.1 } inverse } texture { Glass2 normal { bump_map { gif "gifs/botella_norm.gif" map_type 2 // Clindro bump_size 1 } } scale <15, 15, 15> } interior{ I_Glass} } |
cylinder { < 0, 20, 0> < 0, 19, 0> 1.1 // Tapon texture { pigment {Blue} finish { Plastico } } // fin Tapon interior{ I_Glass} } } } #declare Papel = object { box { <0,0,0,> <1,1,1> } texture { pigment{ image_map { gif "gifs/hoja.gif" } } finish { ambient 0.4 diffuse 0.6 } } interior{ I_Glass} rotate x*90 scale <12, 0.001, 20> } #declare RadLapiz = 0.3; #declare Lapiz = object { union { cylinder { <0,0,0> <0,7.5,0> RadLapiz texture { pigment { DMFDarkOak }} interior{ I_Glass} } cylinder { <0,7.5,0> <0,8.5,0> RadLapiz texture { Gold_Metal } } cone { <0,0,0>RadLapiz <0,-0.8,0> 0.1 texture { pigment { White_Wood } } interior{ I_Glass} } cone { <0,-0.8,0> 0.1 <0,-1, 0> 0 texture { pigment { Black } } interior{ I_Glass} } } } #declare Paredes = object { box { <-100,-50, -50> <100,80, 200> } texture { pigment{ image_map { gif "gifs/gotelet.gif" } } finish { ambient 0.3 diffuse 0.6 } rotate y*45 scale <5, 7, 5> } interior{ I_Glass} } #declare TextuSuelo = texture { pigment { checker color Black color Blue} } #declare Suelo = object { plane { y, -49.9 } texture { PinkAlabaster } interior{ I_Glass} } #declare Mesa = object { union { box { < -80, -10.001, 140> < 100, -13 , 200> } box { < -79, -50, 141> < -75, -10, 145> } box { < 99, -50, 199> < 95, -10, 195> } box { < -79, -50, 199> < -75, -10, 195> } box { < 99, -50, 141> < 95, -10, 145> } } texture { EMBWood1 rotate y*90 rotate x*90 scale <5,5,5> finish { ambient 0.1 diffuse 0.1 specular 1 reflection 0.2 roughness .1 } } interior{ I_Glass} } object {GloboTierra translate <90, -4, 190> } object { Paredes } object { Suelo } object { Mesa } object { Lapiz rotate z*10 translate < 70, -10, 165> } object { Cubilete translate < 70, -10, 165> texture { pigment { White_Wood } } interior{ I_Glass} } object { VasoAgua translate <97,-10, 170> } object { BotellaAgua translate <45,-10, 190> } object { Lapiz rotate z*90 translate < 80, -10+(RadLapiz/2), 155> } object { Papel rotate y *-30 translate < 85, -10, 145> } // ***** Libro LinuxBible ***** #declare LargoLibro = 20; #declare AnchoLibro = 12; #declare GruesoLibro = 4.5; #declare PortadaLibro = "gifs/bookp2.gif" #declare LomoLibro = "gifs/bookl2.gif" #include "Libro.inc" object { Libro rotate x*90 rotate y *-60 translate <36, -10, 165> } // ***** Varios Libros ***** #declare LargoLibro = 20; #declare AnchoLibro = 12; #declare GruesoLibro = 13; #declare PortadaLibro = "gifs/bookp1.gif" #declare LomoLibro = "gifs/bookls1.gif" #include "Libro.inc" object { Libro rotate x*90 rotate y *-90 translate <55, -10, 195> } #declare TamDisquete = 5; #declare PortadaDisquete = "gifs/disquete1.gif" #include "Disquete.inc" object { Disquete rotate x*90 translate <80, -10, 147> } #declare TamDisquete = 5 ; #declare PortadaDisquete = "gifs/disquete2.gif" #include "Disquete.inc" object { Disquete rotate x*90 rotate y*30 translate <90, -10, 165> } // vim: set sw=2 ts=2 et : |
|
Görselyöre sayfalarının bakımı, LinuxFocus Editörleri tarafından yapılmaktadır
© Antonio Castro, FDL LinuxFocus.org Burayı klikleyerek hataları rapor edebilir ya da yorumlarınızı LinuxFocus'a gönderebilirsiniz |
Çeviri bilgisi:
|
2001-03-17, generated by lfparser version 2.9