Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
Bu makalenin farklı dillerde bulunduğu adresler: English  Castellano  Deutsch  Francais  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Photo of the Author]
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:

POVRAY IV: Povray'de Texture Kullanımı

Çeviri : Fehime Çağlayan

[Illustration]

Ö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 ile Texture'ların kullanımı

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.

... kaplama kullanımının geniş repartuarından bir sahne
Açıklamak üzere olduğumuz sahnede nesneleri renk, parlaklık, renk desenleri ile uygun bir şekilde kaplamak için çizimlerin ve dijital fotoların yanısıra pek çok resim kullanılmıştır. Bu sebepten dolayı bu sahne kaplama kullanımının çok yönlü bir örneğidir.

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';

        


 

Kutu Şeklinde Basit Nesneler

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.

 

Cam Nesneleri

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.

 

Duvarlar

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.

Onun yerine kullandığımız bir resim var. Resmi sürekli bir kaplama olarak kullanabilmek için resmin boyutunu yakalayamayacak kadar küçük tutmalısınız. Sağ kenar sol, üst kenar ise alt kenarla fark edilmeden devam edecektir. Kaplama olarak kullanılabilecek pek çok resim vardır ve el altında bunların iyi bir kataloğuna sahip olmak yerinde olur.

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.

 

Yerküre

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.

  1. Küreyi yerleştiriyoruz.
  2. Evrenin bizi ilgilendiren kısmını seçmek için küreyi güney kuzey eksenine göre döndürüyoruz.
  3. Kavisi ve bronz ekseni ekliyoruz.
  4. Öncekilerin hepsini 20 derece döndürüyoruz."(inclination of the terrestrial axis)".
  5. Tabanı ekliyoruz.

Tüm bunları sondaki tam kod listesinde görebilirsiniz.

 

Son Ayrıntılar

... Bazı şeyleri değişik şekilde açıklığa kavuşturmak için zorluklara katlanmaya herzaman değer

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.

[the scene]

Sahnenin son resmine tıklayarak daha parlak ve büyük halini görebilirsiniz.

 

Sahnenin Tamamlanması

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 :



 

References

 

Yazının kaynak kod ve resimleri

 

Bu yazı için görüş bildiriminde bulunabilirsiniz

Her yazı kendi görüş bildirim sayfasına sahiptir. Bu sayfaya yorumlarınızı yazabilir ve diğer okuyucuların yorumlarına bakabilirsiniz.
 talkback page 

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:
es -> -- Antonio Castro
es -> en Katja Socher
en -> tr Fehime Çağlayan

2001-03-17, generated by lfparser version 2.9