









 
 




 
 


I tried to set the camera location to fix the view to the object width using
this formula
direction_length = 0.5 * right_length / tan(angle / 2) where right_length
as
#declare o1 = sphere { <0,0,0>,1 pigment{color rgb<0,0,1>} finish{phong 1} }
#declare l1 = min_extent(o1);
#declare l2 = max_extent(o1);
#declare lx=0.25*(l2.xl1.x)/0.8559934009;
camera {location <0,0,lx> look_at <0,0,0> angle 30}
light_source {<2,5,5> color rgb<1,1,1> }
object{o1}
but lx should at least 10 times larger to view the whole object. Where is my
mistake?
Post a reply to this message


 
 




 
 


I haven't worked out a solution yet, or maybe I have in the past and can't
remember / locate it (yet), but at:
http://news.povray.org/povray.advancedusers/thread/%3C53ff3a80@news.povray.org%3E/
clipka says,
"If you specify a camera angle, it directly specifies the horizontal
field of view; the aspect ratio (relative length of the right and up
vectors, which should ideally fit the image aspect ratio) determines the
vertical field of view."
and
"If you're not using angle, the ratio of the direction vector's length to
that of the right vector's also determines the field of view, ..."
So maybe that helps.
Post a reply to this message


 
 




 
 


"Bald Eagle" <cre### [at] netscapenet> wrote:
> I haven't worked out a solution yet, or maybe I have in the past and can't
> remember / locate it (yet), but at:
I still haven't found what I'm looking for  I could swear that I had written
some code to do this already....
but if you take a look at:
http://news.povray.org/web.591ae6ba4e850994c437ac910%40news.povray.org
I do some calculations to find what radius is always at least 1 pixel wide, and
thus always visible.
If you define that radius to be the image_width, and then work backwards, you
should wind up with a camera position.
I'll see if I can work it out after I get some sleep, but if you're going to
hammer away at this, I always find that a diagram, a spreadsheet, and some good
#debug directives in the code really help me work this kind of thing out lots
faster.
(also, see: http://news.povray.org/58f60d9e%241%40news.povray.org to avoid any
atan problems ;) )
Post a reply to this message


 
 




 
 


"Bald Eagle" <cre### [at] netscapenet> wrote:
> "Bald Eagle" <cre### [at] netscapenet> wrote:
> > I haven't worked out a solution yet, or maybe I have in the past and can't
> > remember / locate it (yet), but at:
>
>
> I still haven't found what I'm looking for  I could swear that I had written
> some code to do this already....
>
>
> but if you take a look at:
>
> http://news.povray.org/web.591ae6ba4e850994c437ac910%40news.povray.org
>
> I do some calculations to find what radius is always at least 1 pixel wide, and
> thus always visible.
>
> If you define that radius to be the image_width, and then work backwards, you
> should wind up with a camera position.
>
>
> I'll see if I can work it out after I get some sleep, but if you're going to
> hammer away at this, I always find that a diagram, a spreadsheet, and some good
> #debug directives in the code really help me work this kind of thing out lots
> faster.
>
> (also, see: http://news.povray.org/58f60d9e%241%40news.povray.org to avoid any
> atan problems ;) )
First of all, I must correct a stupid mistake (in using the calculator). The
tan(15) = 0.26794919
However, my problem with the abovementioned equation
(https://www.povray.org/documentation/view/3.6.1/246/) still stands.
To make the equation work, I must omit 0.5, and I don't know where it comes
from.
Simple example:
Consider the angle of view of 90, then, direction_length = right_length. Since
tang(45) = 1, 0.5 is superfulous.
I can think of 0.5 necessary if only using full_length
(left_lenth+right_lenght). Or amd I making another stupid mistake?
Post a reply to this message


 
 




 
 


"Kima" <nomail@nomail> wrote:
> To make the equation work, I must omit 0.5, and I don't know where it comes
> from.
>
> Simple example:
>
> Consider the angle of view of 90, then, direction_length = right_length. Since
> tang(45) = 1, 0.5 is superfulous.
>
> I can think of 0.5 necessary if only using full_length
> (left_lenth+right_lenght). Or amd I making another stupid mistake?
I feel your pain. I've been through this before, and I found the answer, but
it was too long ago for me to remember where the description / diagram /
explanation lies.
_Somewhere_ in the documentation, and probably in a forum thread or two lies a
discussion of how the camera angle is DEFINED.
IIRC, it isn't what you think it might be, but half of that.
My advice to you  for a lot of things  will be to pretend like POVRay and the
documentation don't exist, and look up how "standard computer graphics" stuff
works. In this case, the view frustum and projection matrices.
The diagrams and explanations and equations will be a lot more extensive,
varied, and often clearer. A lot of it will discussing OpenGL and other
software, but that's irrelevant, since it's all using the same fundamentals.
https://www.scratchapixel.com/lessons/3dbasicrendering/perspectiveandorthographicprojectionmatrix/projectionmatr
iceswhatyouneedtoknowfirst?url=3dbasicrendering/perspectiveandorthographicprojectionmatrix/projectionmatri
ceswhatyouneedtoknowfirst
Take a look at that first diagram, where FOV=90. It only intuitively
illustrates what I'm trying to recall, but I hope it will establish that it's
not a figment of my imagination or memory.
Perhaps one of the developers can chime in with details or a link.
Post a reply to this message


 
 




 
 


"Bald Eagle" <cre### [at] netscapenet> wrote:
> IIRC, it isn't what you think it might be, but half of that
I think maybe this series of equation rearrangements might shed some light on
the issue.
From:
http://news.povray.org/povray.advancedusers/thread/%3Cweb.580f8b048d6e3073b488d9aa0%40news.povray.org%3E/
// direction_length = 0.5 * right_length / tan(angle / 2)
// tan(angle / 2) * direction_length = 0.5 * right_length
// tan(angle / 2) = (0.5 * right_length) / direction_length
// (angle / 2) = atan2( (0.5 * right_length), direction_length)
// angle = 2* atan2( (0.5 * right_length), direction_length)
Post a reply to this message


 
 




 
 


"Bald Eagle" <cre### [at] netscapenet> wrote:
> "Bald Eagle" <cre### [at] netscapenet> wrote:
>
> > IIRC, it isn't what you think it might be, but half of that
>
> I think maybe this series of equation rearrangements might shed some light on
> the issue.
>
> From:
>
http://news.povray.org/povray.advancedusers/thread/%3Cweb.580f8b048d6e3073b488d9aa0%40news.povray.org%3E/
>
> // direction_length = 0.5 * right_length / tan(angle / 2)
> // tan(angle / 2) * direction_length = 0.5 * right_length
> // tan(angle / 2) = (0.5 * right_length) / direction_length
> // (angle / 2) = atan2( (0.5 * right_length), direction_length)
> // angle = 2* atan2( (0.5 * right_length), direction_length)
Thanks for the links and suggestions, they are quite useful.
However, my problem appears in all of the equations you mentioned. The problem
is of trigonometry nature. We have a triangle as depicted here
https://www.povray.org/documentation/view/3.6.1/246/ one side is
direction_length and one side is right_length (half of the view). Tangent
defines their ratio. Where does the "0.5" come from?
Post a reply to this message


 
 




 
 


"Kima" <nomail@nomail> wrote:
> > // angle = 2* atan2( (0.5 * right_length), direction_length)
> one side is
> direction_length and one side is right_length
Which is what?
(half of the view).
And there is the answer. Because Right is usually a unit vector, but the view
frustum is twice as wide as that.
> Tangent
> defines their ratio. Where does the "0.5" come from?
So you use 0.5*right in your trig to get the _half angle_, and then multiply by
two to get  the full angle.
Don't feel bad.
I go through this EVERY TIME.
I'll just throw a few keywords here to make searching for this post easier in
the future.
Bald Eagle Kima camera angle half_angle full_angle distance_vector right_vector
half_vector
Post a reply to this message


 
 




 
 


So, I'm working on a scene to illustrate this.
#declare Aspect = image_width/image_height;
#declare Right_Vector = <1, 0, 0>*Aspect;
#declare Screen_Plane = z;
#declare Camera_Loc = <0, 0, 0>;
#declare Screen_Center = <0, 0, 1>;
#declare Right_Vector = <1, 0, 0>*Aspect; //<
#declare direction_length = vlength (Screen_Center  Camera_Loc);
#declare half_angle = degrees(atan2( (0.5 * vlength(Right_Vector)),
direction_length));
This gives 33.69
Multiplying this by two gives the default camera angle of 67.380
Post a reply to this message


 
 




 
 


I made a new diagram:
http://news.povray.org/povray.binaries.images/message/%3Cweb.5d881ea3763463c54eec112d0%40news.povray.org%3E/#%3Cweb.5d8
81ea3763463c54eec112d0%40news.povray.org%3E
Post a reply to this message


 
 




 

