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