|
|
On Mon, 26 May 2003 08:28:22 +0200, Wojtek Ptak <pta### [at] tlenpl> wrote:
> Stosuje trace, jeno nie
> wiem jak zrobić to tak aby obiekty leżały rownolegle do powierzchni
> obiektu w punkcie jaki dostalem z trace. Czyli moze inaczej - potrzebna
> jest normalna do powierzchni w punkcie z trace...
Hmm, Wojtku, prawde mówiac zastanawiam sie jak Tobie to w ogóle dzialalo skoro
sprawdzenie wartosci wektora normalnego jest jedynym sposobem na potwierdzenie
ze trace znalazlo punkt przeciecia... Zajrzyj do
http://www.povray.org/documentation/view/138/ - tam jest przyklad uzycia trace()
z wktorem normalnym. Jesli to nie wystarczy to moze zle zrozumialem twój
problem.
ABX
Post a reply to this message
|
|
|
|
On Mon, 26 May 2003 10:17:59 +0200, Wojtek Ptak <pta### [at] tlenpl> wrote:
> Na Ciebie wła¶nie liczyłem :)
Do uslug :)
> Hmm. Nie wiem. Podaję wektor normalny fakt... Chyba wiem o co chodzi.
> Tzn. je¶li chcę obłożyć połówkę kuli powiedzmy lusterkami (odpowiednie
> box-y), to nie da się podać wektor normalny od kierunku patrzenia
Czy przez "wektor normalny do kierunku patrzenia" rozumiesz kierunek w którym
wysylasz promien do kuli ?
> i po
> otrzymaniu punktu na kuli położyć tam pod odpowidnim k±tem boxa - k±tem
> pobranym w jakis sposob poprzez podanie obiektu, i punktu na nim?
ale przeciez wlasnie ten kat zwracany jest w czwartyym parametrze funkcji
trace().
> O ile dobrze podejrzewam to muszę oblecieć kulę za pomoc± trace pod
> różnymi k±tami i i dla kazdego kata przykladac lusterko?...
> Chciałem obłożyć napis w ten prosty sposób. Pokrycie tekstu kulkami jest
> oczywi¶cie ok. Ale pokrycie napisu innym obiektem...
> Czyżby więc odpowiednie "zeskanowanie" obiektu w 360 stopniach bylo
> jedynym rozwi±zaniem?
Mam przeczucie ze nie rozumiem jaki efekt chcesz uzyskac. Czy chcesz oblozyc
obiekt lusterkami na calej jego powierzchni czy na powierzchni widzianej z
miejsca polozenia kamery ? Jesli to pierwsze to musisz wywolac trace() "na
okolo", jezeli to drugie to wystarczy wolac trace() z jednego punktu.
Ponizej przykladowy skrypt. Zastanów sie nad petla na koncu - staralem sie
opisac zmienne w miare logicznie. Pytaj, jesli nadal cos niejasne.
#version 3.5;
#include "colors.inc"
#include "functions.inc"
#include "rand.inc"
global_settings { assumed_gamma 1.0 }
camera {
location <0.0, 0.5, -4.0>
direction 1.5*z
right x*image_width/image_height
look_at <0.0, 0.0, 0.0>
}
sky_sphere {
pigment {
gradient y
color_map {
[0.0 rgb <0.6,0.7,1.0>]
[0.7 rgb <0.0,0.1,0.8>]
}
}
}
light_source { <-30, 30, -30> rgb 1 }
plane { y, -1 pigment { color rgb <0.7,0.5,0.3> } }
#declare Srodek = <0,0,0>;
#local Sphere=isosurface {
function{f_sphere(x,y,z,.5)+f_bumps(x*3,y*3,z*3)/3}
max_gradient 2
scale 2
texture {
pigment {color rgb <0.2,0.4,1.0> }
finish{specular 0.6}
}
translate Srodek
}
object{Sphere}
#declare Generator = seed(10);
#declare C=0;
#while(C<1000)
#declare Start=10*VRand_On_Sphere(Generator);
#declare Start=<abs(Start.x),Start.y,Start.z>;
#declare Kierunek = Srodek-Start;
#declare Normalna_Powierzchni = <0,0,0>;
#declare Punkt_Przeciecia=
trace ( Sphere, Start, Kierunek, Normalna_Powierzchni );
// Jesli przeciecie mialo miejsce to Normalna_Powierzchni
// nie jest wektorem zerowym
#if (vlength(Normalna_Powierzchni)!=0)
cone {
Punkt_Przeciecia, .01 , Punkt_Przeciecia + Normalna_Powierzchni / 10, 0
texture { pigment {color red 1} }
}
#end
#declare C=C+1;
#end
ABX
Post a reply to this message
|
|