VTK  9.1.0
vtkCamera.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkCamera.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
138 #ifndef vtkCamera_h
139 #define vtkCamera_h
140 
141 #include "vtkObject.h"
142 #include "vtkRect.h" // for ivar
143 #include "vtkRenderingCoreModule.h" // For export macro
144 
146 class vtkInformation;
147 class vtkMatrix4x4;
149 class vtkRenderer;
150 class vtkTransform;
151 class vtkCallbackCommand;
152 class vtkCameraCallbackCommand;
153 
154 class VTKRENDERINGCORE_EXPORT vtkCamera : public vtkObject
155 {
156 public:
157  vtkTypeMacro(vtkCamera, vtkObject);
158  void PrintSelf(ostream& os, vtkIndent indent) override;
159 
165  static vtkCamera* New();
166 
168 
172  void SetPosition(double x, double y, double z);
173  void SetPosition(const double a[3]) { this->SetPosition(a[0], a[1], a[2]); }
174  vtkGetVector3Macro(Position, double);
176 
178 
182  void SetFocalPoint(double x, double y, double z);
183  void SetFocalPoint(const double a[3]) { this->SetFocalPoint(a[0], a[1], a[2]); }
184  vtkGetVector3Macro(FocalPoint, double);
186 
188 
192  void SetViewUp(double vx, double vy, double vz);
193  void SetViewUp(const double a[3]) { this->SetViewUp(a[0], a[1], a[2]); }
194  vtkGetVector3Macro(ViewUp, double);
196 
203 
208  void SetDistance(double);
209 
211 
215  vtkGetMacro(Distance, double);
217 
219 
224  vtkGetVector3Macro(DirectionOfProjection, double);
226 
233  void Dolly(double value);
234 
236 
239  void SetRoll(double angle);
240  double GetRoll();
242 
247  void Roll(double angle);
248 
255  void Azimuth(double angle);
256 
264  void Yaw(double angle);
265 
272  void Elevation(double angle);
273 
279  void Pitch(double angle);
280 
282 
289  vtkGetMacro(ParallelProjection, vtkTypeBool);
290  vtkBooleanMacro(ParallelProjection, vtkTypeBool);
292 
294 
305  vtkGetMacro(UseHorizontalViewAngle, vtkTypeBool);
306  vtkBooleanMacro(UseHorizontalViewAngle, vtkTypeBool);
308 
310 
321  void SetViewAngle(double angle);
322  vtkGetMacro(ViewAngle, double);
324 
326 
335  void SetParallelScale(double scale);
336  vtkGetMacro(ParallelScale, double);
338 
346  void Zoom(double factor);
347 
349 
362  void SetClippingRange(double dNear, double dFar);
363  void SetClippingRange(const double a[2]) { this->SetClippingRange(a[0], a[1]); }
364  vtkGetVector2Macro(ClippingRange, double);
366 
368 
375  void SetThickness(double);
376  vtkGetMacro(Thickness, double);
378 
380 
389  void SetWindowCenter(double x, double y);
390  vtkGetVector2Macro(WindowCenter, double);
392 
406  void SetObliqueAngles(double alpha, double beta);
407 
414 
416 
421  vtkGetVector3Macro(ViewPlaneNormal, double);
423 
425 
433  void SetViewShear(double dxdz, double dydz, double center);
434  void SetViewShear(double d[3]);
435  vtkGetVector3Macro(ViewShear, double);
437 
439 
443  vtkSetMacro(EyeAngle, double);
444  vtkGetMacro(EyeAngle, double);
446 
448 
454  vtkSetMacro(FocalDisk, double);
455  vtkGetMacro(FocalDisk, double);
457 
459 
467  vtkSetMacro(FocalDistance, double);
468  vtkGetMacro(FocalDistance, double);
470 
472 
481  vtkSetMacro(UseOffAxisProjection, vtkTypeBool);
482  vtkGetMacro(UseOffAxisProjection, vtkTypeBool);
483  vtkBooleanMacro(UseOffAxisProjection, vtkTypeBool);
485 
487 
492  vtkSetVector3Macro(ScreenBottomLeft, double);
493  vtkGetVector3Macro(ScreenBottomLeft, double);
495 
497 
502  vtkSetVector3Macro(ScreenBottomRight, double);
503  vtkGetVector3Macro(ScreenBottomRight, double);
505 
507 
512  vtkSetVector3Macro(ScreenTopRight, double);
513  vtkGetVector3Macro(ScreenTopRight, double);
515 
517 
522  vtkSetMacro(EyeSeparation, double);
523  vtkGetMacro(EyeSeparation, double);
525 
527 
533  void SetEyePosition(double eyePosition[3]);
534  void GetEyePosition(double eyePosition[3]);
536 
541  void GetEyePlaneNormal(double normal[3]);
542 
544 
551  vtkGetObjectMacro(EyeTransformMatrix, vtkMatrix4x4);
553 
560  void SetEyeTransformMatrix(const double elements[16]);
561 
563 
569  vtkGetObjectMacro(ModelTransformMatrix, vtkMatrix4x4);
571 
577  void SetModelTransformMatrix(const double elements[16]);
578 
583 
588 
597 
608 
616  vtkGetObjectMacro(ExplicitProjectionTransformMatrix, vtkMatrix4x4);
624  vtkSetMacro(UseExplicitProjectionTransformMatrix, bool);
625  vtkGetMacro(UseExplicitProjectionTransformMatrix, bool);
626  vtkBooleanMacro(UseExplicitProjectionTransformMatrix, bool);
634  vtkSetMacro(ExplicitAspectRatio, double);
635  vtkGetMacro(ExplicitAspectRatio, double);
644  vtkSetMacro(UseExplicitAspectRatio, bool);
645  vtkGetMacro(UseExplicitAspectRatio, bool);
646  vtkBooleanMacro(UseExplicitAspectRatio, bool);
659  virtual vtkMatrix4x4* GetProjectionTransformMatrix(double aspect, double nearz, double farz);
660 
672  double aspect, double nearz, double farz);
673 
686  double aspect, double nearz, double farz);
687 
696 
698 
704  vtkGetObjectMacro(UserViewTransform, vtkHomogeneousTransform);
706 
708 
714  vtkGetObjectMacro(UserTransform, vtkHomogeneousTransform);
716 
722  virtual void Render(vtkRenderer*) {}
723 
728 
734 
745  virtual void GetFrustumPlanes(double aspect, double planes[24]);
746 
748 
758  virtual void UpdateIdealShiftScale(double aspect);
759  vtkGetVector3Macro(FocalPointShift, double);
760  vtkGetMacro(FocalPointScale, double);
761  vtkGetVector3Macro(NearPlaneShift, double);
762  vtkGetMacro(NearPlaneScale, double);
763  vtkSetMacro(ShiftScaleThreshold, double);
764  vtkGetMacro(ShiftScaleThreshold, double);
766 
768 
772  double* GetOrientationWXYZ() VTK_SIZEHINT(4);
774 
779  void ComputeViewPlaneNormal();
780 
786  vtkMatrix4x4* GetCameraLightTransformMatrix();
787 
791  virtual void UpdateViewport(vtkRenderer* vtkNotUsed(ren)) {}
792 
794 
797  vtkGetMacro(Stereo, int);
799 
801 
804  vtkSetMacro(LeftEye, int);
805  vtkGetMacro(LeftEye, int);
807 
815 
823 
825 
830  vtkSetMacro(FreezeFocalPoint, bool);
831  vtkGetMacro(FreezeFocalPoint, bool);
833 
835 
838  vtkSetMacro(UseScissor, bool);
839  vtkGetMacro(UseScissor, bool);
841 
843 
846  void SetScissorRect(vtkRecti scissorRect);
847  void GetScissorRect(vtkRecti& scissorRect);
849 
851 
854  vtkGetObjectMacro(Information, vtkInformation);
857 
858 protected:
860  ~vtkCamera() override;
861 
863 
867  virtual void ComputeViewTransform();
869 
873  virtual void ComputeProjectionTransform(double aspect, double nearz, double farz);
874 
878  void ComputeCompositeProjectionTransform(double aspect, double nearz, double farz);
879 
881 
887 
892 
897 
905 
906  double WindowCenter[2];
907  double ObliqueAngles[2];
908  double FocalPoint[3];
909  double Position[3];
910  double ViewUp[3];
911  double ViewAngle;
912  double ClippingRange[2];
913  double EyeAngle;
916  int Stereo;
917  int LeftEye;
918  double Thickness;
919  double Distance;
920  double DirectionOfProjection[3];
921  double ViewPlaneNormal[3];
922  double ViewShear[3];
924 
926 
927  double ScreenBottomLeft[3];
928  double ScreenBottomRight[3];
929  double ScreenTopRight[3];
930 
932 
935 
937 
939 
942 
945 
948 
953 
955 
956  double FocalDisk;
958 
959  double FocalPointShift[3];
961  double NearPlaneShift[3];
964 
965  vtkCameraCallbackCommand* UserViewTransformCallbackCommand;
966  friend class vtkCameraCallbackCommand;
967 
968  // ViewingRaysMtime keeps track of camera modifications which will
969  // change the calculation of viewing rays for the camera before it is
970  // transformed to the camera's location and orientation.
974 
976 
977  // Arbitrary extra information associated with this camera.
979 
980 private:
981  vtkCamera(const vtkCamera&) = delete;
982  void operator=(const vtkCamera&) = delete;
983 };
984 
985 #endif
supports function callbacks
a virtual camera for 3D rendering
Definition: vtkCamera.h:155
bool UseExplicitProjectionTransformMatrix
Definition: vtkCamera.h:944
void ComputeOffAxisProjectionFrustum()
Compute and use frustum using offaxis method.
vtkInformation * Information
Definition: vtkCamera.h:978
virtual void SetInformation(vtkInformation *)
Set/Get the information object associated with this camera.
vtkMatrix4x4 * EyeTransformMatrix
Definition: vtkCamera.h:936
void Roll(double angle)
Rotate the camera about the direction of projection.
vtkTypeBool ParallelProjection
Definition: vtkCamera.h:914
void ApplyTransform(vtkTransform *t)
Apply a transform to the camera.
void SetModelTransformMatrix(vtkMatrix4x4 *matrix)
Set/Get model transformation matrix.
double GetRoll()
Set the roll angle of the camera about the direction of projection.
vtkPerspectiveTransform * Transform
Definition: vtkCamera.h:951
void ComputeCameraLightTransform()
void SetViewUp(const double a[3])
Set/Get the view up direction for the camera.
Definition: vtkCamera.h:193
vtkTransform * ViewTransform
Definition: vtkCamera.h:949
double FocalDistance
Definition: vtkCamera.h:957
void SetUserTransform(vtkHomogeneousTransform *transform)
In addition to the instance variables such as position and orientation, you can add an additional tra...
virtual void ComputeViewTransform()
These methods should only be used within vtkCamera.cxx.
double FocalPointScale
Definition: vtkCamera.h:960
bool FreezeFocalPoint
Definition: vtkCamera.h:972
void SetEyePosition(double eyePosition[3])
Set/Get the eye position (center point between two eyes).
void SetPosition(const double a[3])
Set/Get the position of the camera in world coordinates.
Definition: vtkCamera.h:173
virtual vtkMatrix4x4 * GetViewTransformMatrix()
For backward compatibility.
void Yaw(double angle)
Rotate the focal point about the view up vector, using the camera's position as the center of rotatio...
void SetRoll(double angle)
Set the roll angle of the camera about the direction of projection.
void PartialCopy(vtkCamera *source)
Copy the ivars.
void Elevation(double angle)
Rotate the camera about the cross product of the negative of the direction of projection and the view...
double EyeAngle
Definition: vtkCamera.h:913
void Azimuth(double angle)
Rotate the camera about the view up vector centered at the focal point.
vtkHomogeneousTransform * UserTransform
Definition: vtkCamera.h:940
void DeepCopy(vtkCamera *source)
Copy the properties of ‘source’ into ‘this’.
virtual vtkMatrix4x4 * GetProjectionTransformMatrix(double aspect, double nearz, double farz)
Return the projection transform matrix, which converts from camera coordinates to viewport coordinate...
void Pitch(double angle)
Rotate the focal point about the cross product of the view up vector and the direction of projection,...
vtkTypeBool UseOffAxisProjection
Definition: vtkCamera.h:925
vtkMatrix4x4 * ExplicitProjectionTransformMatrix
Definition: vtkCamera.h:943
void SetObliqueAngles(double alpha, double beta)
Get/Set the oblique viewing angles.
double NearPlaneScale
Definition: vtkCamera.h:962
void SetParallelProjection(vtkTypeBool flag)
Set/Get the value of the ParallelProjection instance variable.
void ComputeModelViewMatrix()
Compute model view matrix for the camera.
int LeftEye
Definition: vtkCamera.h:917
double EyeSeparation
Definition: vtkCamera.h:931
virtual void GetFrustumPlanes(double aspect, double planes[24])
Get the plane equations that bound the view frustum.
void Zoom(double factor)
In perspective mode, decrease the view angle by the specified factor.
void SetPosition(double x, double y, double z)
Set/Get the position of the camera in world coordinates.
void SetViewUp(double vx, double vy, double vz)
Set/Get the view up direction for the camera.
double * GetOrientation()
Get the orientation of the camera.
vtkMatrix4x4 * ModelTransformMatrix
Definition: vtkCamera.h:938
void ShallowCopy(vtkCamera *source)
Copy the properties of ‘source’ into ‘this’.
static vtkCamera * New()
Construct camera instance with its focal point at the origin, and position=(0,0,1).
double FocalDisk
Definition: vtkCamera.h:956
double Distance
Definition: vtkCamera.h:919
bool UseExplicitAspectRatio
Definition: vtkCamera.h:947
void SetModelTransformMatrix(const double elements[16])
Set model transformation matrix.
void SetClippingRange(double dNear, double dFar)
Set/Get the location of the near and far clipping planes along the direction of projection.
void SetThickness(double)
Set the distance between clipping planes.
void GetScissorRect(vtkRecti &scissorRect)
Set/Get the vtkRect value of the scissor.
virtual void Render(vtkRenderer *)
This method causes the camera to set up whatever is required for viewing the scene.
Definition: vtkCamera.h:722
void ViewingRaysModified()
Mark that something has changed which requires the view rays to be recomputed.
void SetFocalPoint(const double a[3])
Set/Get the focal of the camera in world coordinates.
Definition: vtkCamera.h:183
void SetEyeTransformMatrix(vtkMatrix4x4 *matrix)
Set/Get eye transformation matrix.
void GetEyePosition(double eyePosition[3])
Set/Get the eye position (center point between two eyes).
void SetDistance(double)
Move the focal point so that it is the specified distance from the camera position.
virtual vtkTransform * GetModelViewTransformObject()
Return the model view transform.
void SetWindowCenter(double x, double y)
Set/Get the center of the window in viewport coordinates.
void SetEyeTransformMatrix(const double elements[16])
Set the eye transform matrix.
double Thickness
Definition: vtkCamera.h:918
void SetScissorRect(vtkRecti scissorRect)
Set/Get the vtkRect value of the scissor.
virtual vtkMatrix4x4 * GetProjectionTransformMatrix(vtkRenderer *ren)
Return the projection transform matrix, which converts from camera coordinates to viewport coordinate...
void ComputeCompositeProjectionTransform(double aspect, double nearz, double farz)
These methods should only be used within vtkCamera.cxx.
vtkRecti ScissorRect
Definition: vtkCamera.h:975
vtkMatrix4x4 * WorldToScreenMatrix
Definition: vtkCamera.h:933
virtual vtkMatrix4x4 * GetModelViewTransformMatrix()
Return the model view matrix of model view transform.
vtkTransform * CameraLightTransform
Definition: vtkCamera.h:952
bool UseScissor
Definition: vtkCamera.h:973
void SetViewAngle(double angle)
Set/Get the camera view angle, which is the angular height of the camera view measured in degrees.
void GetEyePlaneNormal(double normal[3])
Get normal vector from eye to screen rotated by EyeTransformMatrix.
vtkTypeBool UseHorizontalViewAngle
Definition: vtkCamera.h:923
void ComputeWorldToScreenMatrix()
Given screen screen top, bottom left and top right calculate screen rotation.
void OrthogonalizeViewUp()
Recompute the ViewUp vector to force it to be perpendicular to camera->focalpoint vector.
vtkTimeStamp WorldToScreenMatrixMTime
Definition: vtkCamera.h:934
void Dolly(double value)
Divide the camera's distance from the focal point by the given dolly value.
virtual void SetExplicitProjectionTransformMatrix(vtkMatrix4x4 *)
Set/get an explicit 4x4 projection matrix to use, rather than computing one from other state variable...
vtkMTimeType GetViewingRaysMTime()
Return the MTime that concerns recomputing the view rays of the camera.
void SetFocalPoint(double x, double y, double z)
Set/Get the focal of the camera in world coordinates.
void SetUseHorizontalViewAngle(vtkTypeBool flag)
Set/Get the value of the UseHorizontalViewAngle instance variable.
int Stereo
Definition: vtkCamera.h:916
virtual vtkMatrix4x4 * GetCompositeProjectionTransformMatrix(double aspect, double nearz, double farz)
Return the concatenation of the ViewTransform and the ProjectionTransform.
~vtkCamera() override
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetParallelScale(double scale)
Set/Get the scaling used for a parallel projection, i.e.
double ViewAngle
Definition: vtkCamera.h:911
void SetViewShear(double d[3])
Set/get the shear transform of the viewing frustum.
double ParallelScale
Definition: vtkCamera.h:915
vtkHomogeneousTransform * UserViewTransform
Definition: vtkCamera.h:941
vtkPerspectiveTransform * ProjectionTransform
Definition: vtkCamera.h:950
vtkCameraCallbackCommand * UserViewTransformCallbackCommand
Definition: vtkCamera.h:965
double ShiftScaleThreshold
Definition: vtkCamera.h:963
virtual void ComputeProjectionTransform(double aspect, double nearz, double farz)
These methods should only be used within vtkCamera.cxx.
void SetUserViewTransform(vtkHomogeneousTransform *transform)
In addition to the instance variables such as position and orientation, you can add an additional tra...
void ComputeDistance()
These methods should only be used within vtkCamera.cxx.
virtual vtkTransform * GetViewTransformObject()
For backward compatibility.
void SetViewShear(double dxdz, double dydz, double center)
Set/get the shear transform of the viewing frustum.
virtual void UpdateIdealShiftScale(double aspect)
The following methods are used to support view dependent methods for normalizing data (typically poin...
virtual vtkPerspectiveTransform * GetProjectionTransformObject(double aspect, double nearz, double farz)
Return the projection transform matrix, which converts from camera coordinates to viewport coordinate...
vtkTransform * ModelViewTransform
Definition: vtkCamera.h:954
void SetClippingRange(const double a[2])
Set/Get the location of the near and far clipping planes along the direction of projection.
Definition: vtkCamera.h:363
vtkTimeStamp ViewingRaysMTime
Definition: vtkCamera.h:971
double ExplicitAspectRatio
Definition: vtkCamera.h:946
superclass for homogeneous transformations
a simple class to control print indentation
Definition: vtkIndent.h:113
Store vtkAlgorithm input/output information.
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:145
abstract base class for most VTK objects
Definition: vtkObject.h:73
describes a 4x4 matrix transformation
abstract specification for renderers
Definition: vtkRenderer.h:173
record modification and/or execution time
Definition: vtkTimeStamp.h:52
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
@ value
Definition: vtkX3D.h:226
@ scale
Definition: vtkX3D.h:235
@ center
Definition: vtkX3D.h:236
@ alpha
Definition: vtkX3D.h:256
int vtkTypeBool
Definition: vtkABI.h:69
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287
#define VTK_SIZEHINT(...)