|
|
Harold Baize wrote in message <387e613f@news.povray.org>...
>> camera {
>> #local L=28;
>> #local Pos=<-45 , 12 ,-30>*.7;
>> location Pos + vnormalize(vcross(Pos,y))*clock
>> look_at <0, 0 , -2>
>> angle degrees(atan2(35,L))
>> }
>
>Whoa, hecka complex camera statement. Guess I'm still thinking with a
>POV 1.0 camera syntax.
How's this? This is one of the cameras from a fly-through of the Grand
Canyon that I'm working on.
camera{
#declare Clock = clock;
// Some basic vector calculus, plus a fudge factor
#declare UnitTangent = vnormalize(path(Clock+dclock)-path(Clock));
#declare PlusdClock =
vnormalize(path(Clock+dclock+dclock)-path(Clock+dclock));
#declare UnitNormal = vnormalize(PlusdClock - UnitTangent);
#if(vlength(UnitNormal)=0)#declare UnitNormal =
vaxis_rotate(y,vcross(UnitTangent, y),
90-degrees(acos(vdot(UnitTangent,y))));#end
#declare Curvature = vlength((PlusdClock -
UnitTangent)/dclock)/vlength((path(Clock+dclock)-path(Clock))/dclock);
#declare UpVect1 = vaxis_rotate(y,vcross(UnitTangent, y),
90-degrees(acos(vdot(UnitTangent,y))));
#declare AngleFract = atan2(Curvature,1)/(pi/2);
#declare Angle = degrees(acos(vdot(UnitNormal, UpVect1)));
#if(vdot(UnitNormal,UpVect1)<0)#declare Angle=(-360)+Angle;#end
#declare Angle = (Angle/2)*AngleFract;
#fopen FileID "GCanyon.dat" read
#read(FileID, OldAngle)
#fclose FileID
#if(abs(Angle-OldAngle)>dAngle)
#declare Angle=OldAngle+(abs(dAngle)*Sign(Angle));
#end
#fopen FileID "GCanyon.dat" write
#write(FileID, Angle)
#fclose FileID
#declare UpVect = vaxis_rotate(UpVect1,UnitTangent,Angle);
#declare UnitBinormal = vnormalize(vcross(UnitTangent, UpVect));
#warning concat("Tangent: ", str(UnitTangent.x,6,6),",",
str(UnitTangent.y,6,6), ",",str(UnitTangent.z,6,6), "\n")
#warning concat("Normal: ", str(UnitNormal.x,6,6),",",
str(UnitNormal.y,6,6), ",",str(UnitNormal.z,6,6), "\n")
#warning concat("UpVect: ", str(UpVect.x,6,6),",", str(UpVect.y,6,6),
",",str(UpVect.z,6,6), "\n")
#warning concat("Binormal: ", str(UnitBinormal.x,6,6),",",
str(UnitBinormal.y,6,6), ",",str(UnitBinormal.z,6,6), "\n")
location path(Clock)
direction UnitTangent
up UpVect
right UnitBinormal*1.33
angle 60
}
Mark
Post a reply to this message
|
|