Witamy, Gość. Zaloguj się lub zarejestruj.

Autor Wątek: Pov-ray podstawy  (Przeczytany 8086 razy)

0 Użytkowników i 1 Gość przegląda ten wątek.

Sympatyk

  • *****
  • Podziękowania otrzymane: 44
  • Master of science
    • Zobacz profil
    • Moje
  • Ostatnie nagrody:
  • Layout of the Fortnight #45
Pov-ray podstawy
« dnia: Luty 15, 2011, 12:51:07 »
Najczęściej pierwszy programem w kursie jest "Hello World", tutaj jednak będzie inaczej.
Najpierw trzeba sobie przypomniec jak wszystko funkcjonowało w układzie współrzędnych (x,y). Jeśli jakiś punkt miał współrzędne (x,y) to jednoznacznie mogliśmy go umieścic na układzie, chocby w taki sposób potrafimy narysowac sinusoide. Analogicznie zabawa odbywa się jeśli mamy układ współrzędnych (x,y,z).

START
Zauważmy, iż żeby umieścic prostopadłościan na układzie współrzędnych (x,y,z) to potrzebujemy jedynie DWÓCH jego punktów, te punktu łączy przekątna prostopadłościanu, czyli prostopadłościan będziemy wyznaczac tak (liczby oddzielamy przecinkiem i pamiętajmy, że 0.5 = 1/2 ale 0,5 NIE jest liczbą.)
box
{
        <0,0.5,0> <10,1,5>
}

Wyznaczanie cylidrów wygląda tak, podajemy współrzędne środków oby podstaw a potem promień oby podstaw czyli
cylinder
{
        <15.6,6,2.5> <15.6,6.5,2.5>,2
}

Stożek, jest bardzo podobny do cylindra, różni się tym, że podstawy mogą miec różne promienie
cone
{
        <15.6,8,1.5>,2.5,<15.6,13,2.5>,2
}

Kula analogicznie, podajemy współrzędne środka i potem promień
sphere
{
        <16.1,4,-0.1>,0.5
}

Ściany(plane), podajemy orientacje :) x-pion y-poziom i potem zasięg.
plane
{                     
        y,0



OPERACJE NA FIGURACH - czyli suma, różnica, częśc wspólna itp..
Najprostrzym jest suma czyli UNION, wynikiem jest połączenie wszystkich figur w jednośc i definiuje sie ją tak:
union
{
   box
   {
        <0,0.5,0> <10,1,5>
   }
   cylinder
   {
        <15.6,6,2.5> <15.6,6.5,2.5>,2
   }
}

Częśc wspólnia(intersection) działa tak samo jak suma i definiuje się
intersection
{
   box
   {
        <0,0.5,0> <10,1,5>
   }
   cylinder
   {
        <15.6,6,2.5> <15.6,6.5,2.5>,2
   }
}

Różnica(difference), wynikiem będzie DRUGI stożek, a ich częśc wspólna zostanie zanihilowana
difference
{
        cone {<15.6,8,1.5>,2.5,<15.6,13,2.5>,2} //PIERWSZY
         
         
        cone {<15.6,7.5,1.5>,2.45,<15.6,12,2.5>,1.9} //DRUGIE
}

Bardzo podobno do sumy(Union) jest scalanie(Merge) wyjątek jest taki, że Merge jest jakby dokładniejsze ale i wolniejsze przy renderowaniu. Chodzi generalnie o częśc wspólną w union się nią nie przejmują i na "chama" ją "wlepiają" ze sobą i jest tak jakby figura w figurze, w Merge tego nie ma, częśc wspólna jest usuwana. Generalnie Merge się nie używa, bo nie ma takiej potrzeby skoro każda figura ma swoją jakąs teksture, wyjątkiem właśnie są przeźroczyste tekstury chocby szyba.

Pętla WHILE i zmienne
Konstrukcja taka jak wszędzie, tylko, że na końcu trzeba wstawic end
#while(WARUNEK)
//ciało pętli
#end
Mamy już pętle while ale jak zrobic warunek, żeby np. coś powtórzyło 3 razy. Do tego użyjemy zmiennych.
Definiujemy je tak:
#declare polka=1; czyli pętla wygląda tak:
#declare polka=1; 
#while(polka<4)
        #declare polka=polka+1;
#end
Taka pętla wykona sie dokładnie 3 razy, ale nic więcej nie zrobi.
Używamy jej do powtarzających się obiektów chocby półek szafki, są identyczne, powtarzają się cyklicznie a róznią się jedynie położeniem. Do tego celu potrzebujemy jeszcze jednem zmiennej
#declare zmienna=4.5;Na takiej wysokości będzie umieszczona pierwsza półka, no i teraz uruchamiamy while
#declare polka=1; 
#declare zmienna=4.5;
#while(polka<4)
        box
        {       
                <0.5,zmienna,0> <10,5*polka,5>

        }
        #declare polka=polka+1;
        #declare zmienna=zmienna+5;
#end
Dzięki temu powstaną trzy identyczne prostopadłościany oddalone od siebie o 5

TEKTURY
Zaczynamu od includa na początku programu biblioteki z teksturami
#include "textures.inc"
#include "woods.inc"
Ustawiamy tekstury podczas nadawania im współrzędnych:
box
{
        <0,0.5,0> <10,1,5>
        texture { T_Wood1 }
}
Testury znajdziemy tutaj

Jednak zawsze możemy sobie ustawic jakiś kolor to wtedy inludujemy co innego.
Kolory piszę ZAWSZE z wielkiej litery.
#include "colors.inc"box
{
        <0,0.5,0> <10,1,5> Brown
}

Kamera i światła
Źródło światła ustawiamy tak: współrzędne i kolor
light_source
{
      <-10,10,-10> Brown
}

Ustawienie kamer. Podajemy współrzędne umieszczenie kamery a potem punkt na który jest skierowana
camera
{   
        location <15,3,-30>  // miejsce umieszczenia kamery
        look_at <5,5,0>      // punkt na który kamera jest skierowana
}

Dokumentacja znajduje się TUTAJ

Abik

Odp: Pov-ray podstawy
« Odpowiedź #1 dnia: Luty 15, 2011, 14:30:04 »
Dzięki spoko tutek, powinien się wielu osobom przydać :D
chociaż i tak spróbuję jeszcze zrobić "swoją wersję", dopisze parę innych rzeczy, skalowanie, obracanie, bloby, mapy wysokości, różne pierdy, trochę tego jest w povrayu :D
ale jeszcze raz dzięki, dobra robota :*