<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<title>VtkCamera -- Zoom method</title>
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"Monotype Corsiva";
        panose-1:3 1 1 1 1 2 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>I read this post mainly because I thought it might have
something to do with my Dolly question from a couple weeks ago. I’m not sure
why you’re questioning this implementation, or what you mean by “translation”,
since there’s no translation going on here. “Zooming” doesn’t mean moving the
camera closer to what it’s looking at (that’s called “dollying”). Zooming is
what happens when you put a zoom-lens (or “telephoto” lens) on your camera,
which basically has the effect of reducing the camera’s view angle so that
objects that subtend a smaller view angle fill the image. This is basically
synonymous with “magnification”. <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<div>
<p class=MsoNormal><span style='font-size:24.0pt;font-family:"Monotype Corsiva";
color:#1F497D'>Chris</span><span style='color:#1F497D'><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;color:#1F497D'>--<br>
Christopher R. Volpe, Ph.D. </span><span
lang=FR style='font-size:10.0pt;color:#1F497D'>Email: <a
href="mailto:cvolpe@ara.com"><span style='color:blue'>cvolpe@ara.com</span></a>
<o:p></o:p></span></p>
<p class=MsoNormal><span lang=FR style='font-size:10.0pt;color:#1F497D'>Senior
Scientist, Information Exploitation Systems Main Desk: 919-582-3300<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;color:#1F497D'><a
href="http://www.ara.com/"><span style='color:blue'>Applied Research
Associates, Inc</span></a> Direct:
919-582-3380<o:p></o:p></span></p>
<p class=MsoNormal><span lang=FR style='font-size:10.0pt;color:#1F497D'>8537
Six Forks Rd., Suite
6000 Fax :
919-582-3301<o:p></o:p></span></p>
<p class=MsoNormal><span lang=FR style='font-size:10.0pt;color:#1F497D'>Raleigh,
NC 27615 Web: </span><span
style='font-size:10.0pt;color:#1F497D'><a
href="http://www.ara.com/offices/NC.htm"
title="http://www.ara.com/offices/NC.htm"><span style='color:blue'>http://www.ara.com/offices/NC.htm</span></a></span><span
lang=FR style='font-size:10.0pt;color:#1F497D'><o:p></o:p></span></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span
style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><span
style='font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p>
</div>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
vtkusers-bounces@vtk.org [mailto:vtkusers-bounces@vtk.org] <b>On Behalf Of </b>Gerrick
Bivins<br>
<b>Sent:</b> Monday, September 15, 2008 6:26 PM<br>
<b>To:</b> VTK-users<br>
<b>Subject:</b> [vtkusers] VtkCamera -- Zoom method<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;
font-family:"Calibri","sans-serif"'>Hi All, Long email but please bear with me.<br>
;)<br>
I have had this problem of zooming in with vtkInteractorStyleRubberBandZoom.<br>
Today was the day to tackle is and eventually I realized that zoom works fine
when I use parallel projection but not perspective. <br>
When I switch to perspective projection and zoom in, at some point the view
angle gets set to 0 (1e-8). <br>
<br>
I’ve dug down into the code and ran across this implementation for Zoom in
vtkCamera which is being called by vtkInteractorStyleRubberBandZoom:<br>
<br>
//----------------------------------------------------------------------------<br>
// Change the ViewAngle (for perspective) or the ParallelScale (for parallel)<br>
// so that more or less of a scene occupies the viewport. A value > 1
is a<br>
// zoom-in. A value < 1 is a zoom-out.<br>
void vtkCamera::Zoom(double amount)<br>
{<br>
if (amount <= 0.0)<br>
{<br>
return;<br>
}<br>
<br>
if (this->ParallelProjection)<br>
{<br>
this->SetParallelScale(this->ParallelScale/amount);<br>
}<br>
else<br>
{<br>
this->SetViewAngle(this->ViewAngle/amount);//<==Why
is zoom implemented like this? Why isn’t it a function of translation?<br>
}<br>
}<br>
<br>
Which is defined here:<br>
</span><span style='font-size:7.5pt;font-family:"Courier New"'>void
vtkCamera::SetViewAngle(double angle)<br>
{<br>
double min = 0.00000001;<br>
double max = 179.0;<br>
<br>
if ( this->ViewAngle != angle )<br>
{<br>
this->ViewAngle = (angle<min?min:(angle>max?max:angle));<br>
this->Modified();<br>
this->ViewingRaysModified();<br>
}<br>
}<br>
</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'><br>
At this point(when min is set ), rendering becomes messed up (backfaces and bad
z-fighting) and the only way to fix things is to restart the application.<br>
This 0 can be seen as problematic in functions like<br>
<br>
vktRenderer::ResetCamera(double bounds[6])<br>
{<br>
...<br>
//around line 990<br>
distance =
radius/sine(this->ActiveCamera()->GetViewAngle()*vtkMath::Pi()/360.0);//<==
(radius/some really small number if view angle is small) == some really big
number(e12)!!!!!<br>
...<br>
//around line 1004<br>
this->ActiveCamera->SetPosition(center[0]+distance*vn[0],
center[1]+distance*vn[1], center[2]+distance*vn[2]); //<==Uh Oh distance is
a really big number(e12)!!<br>
}<br>
So finally, my question deals with trying to get a better understanding of the
“Zoom” method in vtkCamera.<br>
I don’t understand why zoom is implemented by changing the view angle. <br>
Why isn’t it a function of translating the camera along it’s view vector toward
or away from it’s lookAt point?<br>
<br>
Hopefully someone made it this far and can shed some light here.<br>
;)<br>
Gerrick<br>
<br>
<br>
<br>
<br>
</span><o:p></o:p></p>
</div>
</body>
</html>