|
|
Sigmund Kyrre Aas <as### [at] studntnuno> wrote in message
news:387E5AB6.1772ADD6@stud.ntnu.no...
> Harold Baize wrote:
> Don't be. The camera separation would be the same :) Here's my cam:
> 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.
> The target is at <0,0,0> and it's normal is -x. On closer inspection,
> the camera distance is 39 units and the target radius is 15, so the "one
> unit for every 30 units" rule is actually fulfilled.
Which is why it produces a strong stereo effect without eye strain :-).
To look at an object 39cm from your eyes you would definitely need to
converge the eyes. Instead you bring the cameras together. The
result is a dart board that appears to be more than a meter in diameter.
> Can this rule be derived from the focal length of the human eye or
> something?
Yes, but I'll have to look up the specifics if you want them. Ultimately
though, the rule is species specific, a dog would use a smaller separation,
say 1:20.
Harolddd
Post a reply to this message
|
|
|
|
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
|
|