VTK  9.3.0
vtkCamera.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
23 #ifndef vtkCamera_h
24 #define vtkCamera_h
25 
26 #include "vtkObject.h"
27 #include "vtkRect.h" // for ivar
28 #include "vtkRenderingCoreModule.h" // For export macro
29 
30 VTK_ABI_NAMESPACE_BEGIN
32 class vtkInformation;
33 class vtkMatrix4x4;
35 class vtkRenderer;
36 class vtkTransform;
37 class vtkCallbackCommand;
38 class vtkCameraCallbackCommand;
39 
40 class VTKRENDERINGCORE_EXPORT vtkCamera : public vtkObject
41 {
42 public:
43  vtkTypeMacro(vtkCamera, vtkObject);
44  void PrintSelf(ostream& os, vtkIndent indent) override;
45 
51  static vtkCamera* New();
52 
54 
58  void SetPosition(double x, double y, double z);
59  void SetPosition(const double a[3]) { this->SetPosition(a[0], a[1], a[2]); }
60  vtkGetVector3Macro(Position, double);
62 
64 
68  void SetFocalPoint(double x, double y, double z);
69  void SetFocalPoint(const double a[3]) { this->SetFocalPoint(a[0], a[1], a[2]); }
70  vtkGetVector3Macro(FocalPoint, double);
72 
74 
78  void SetViewUp(double vx, double vy, double vz);
79  void SetViewUp(const double a[3]) { this->SetViewUp(a[0], a[1], a[2]); }
80  vtkGetVector3Macro(ViewUp, double);
82 
89 
94  void SetDistance(double);
95 
97 
101  vtkGetMacro(Distance, double);
103 
105 
110  vtkGetVector3Macro(DirectionOfProjection, double);
112 
119  void Dolly(double value);
120 
122 
125  void SetRoll(double angle);
126  double GetRoll();
128 
133  void Roll(double angle);
134 
141  void Azimuth(double angle);
142 
150  void Yaw(double angle);
151 
158  void Elevation(double angle);
159 
165  void Pitch(double angle);
166 
168 
175  vtkGetMacro(ParallelProjection, vtkTypeBool);
176  vtkBooleanMacro(ParallelProjection, vtkTypeBool);
178 
180 
191  vtkGetMacro(UseHorizontalViewAngle, vtkTypeBool);
192  vtkBooleanMacro(UseHorizontalViewAngle, vtkTypeBool);
194 
196 
207  void SetViewAngle(double angle);
208  vtkGetMacro(ViewAngle, double);
210 
212 
221  void SetParallelScale(double scale);
222  vtkGetMacro(ParallelScale, double);
224 
232  void Zoom(double factor);
233 
235 
248  void SetClippingRange(double dNear, double dFar);
249  void SetClippingRange(const double a[2]) { this->SetClippingRange(a[0], a[1]); }
250  vtkGetVector2Macro(ClippingRange, double);
252 
254 
261  void SetThickness(double);
262  vtkGetMacro(Thickness, double);
264 
266 
275  void SetWindowCenter(double x, double y);
276  vtkGetVector2Macro(WindowCenter, double);
278 
292  void SetObliqueAngles(double alpha, double beta);
293 
300 
302 
307  vtkGetVector3Macro(ViewPlaneNormal, double);
309 
311 
319  void SetViewShear(double dxdz, double dydz, double center);
320  void SetViewShear(double d[3]);
321  vtkGetVector3Macro(ViewShear, double);
323 
325 
329  vtkSetMacro(EyeAngle, double);
330  vtkGetMacro(EyeAngle, double);
332 
334 
340  vtkSetMacro(FocalDisk, double);
341  vtkGetMacro(FocalDisk, double);
343 
345 
353  vtkSetMacro(FocalDistance, double);
354  vtkGetMacro(FocalDistance, double);
356 
358 
367  vtkSetMacro(UseOffAxisProjection, vtkTypeBool);
368  vtkGetMacro(UseOffAxisProjection, vtkTypeBool);
369  vtkBooleanMacro(UseOffAxisProjection, vtkTypeBool);
371 
373 
379 
381 
386  vtkSetVector3Macro(ScreenBottomLeft, double);
387  vtkGetVector3Macro(ScreenBottomLeft, double);
389 
391 
396  vtkSetVector3Macro(ScreenBottomRight, double);
397  vtkGetVector3Macro(ScreenBottomRight, double);
399 
401 
406  vtkSetVector3Macro(ScreenTopRight, double);
407  vtkGetVector3Macro(ScreenTopRight, double);
409 
411 
416  vtkSetMacro(EyeSeparation, double);
417  vtkGetMacro(EyeSeparation, double);
419 
421 
427  void SetEyePosition(double eyePosition[3]);
428  void GetEyePosition(double eyePosition[3]);
430 
435  void GetEyePlaneNormal(double normal[3]);
436 
438 
445  vtkGetObjectMacro(EyeTransformMatrix, vtkMatrix4x4);
447 
454  void SetEyeTransformMatrix(const double elements[16]);
455 
457 
463  vtkGetObjectMacro(ModelTransformMatrix, vtkMatrix4x4);
465 
471  void SetModelTransformMatrix(const double elements[16]);
472 
477 
482 
491 
502 
510  vtkGetObjectMacro(ExplicitProjectionTransformMatrix, vtkMatrix4x4);
518  vtkSetMacro(UseExplicitProjectionTransformMatrix, bool);
519  vtkGetMacro(UseExplicitProjectionTransformMatrix, bool);
520  vtkBooleanMacro(UseExplicitProjectionTransformMatrix, bool);
528  vtkSetMacro(ExplicitAspectRatio, double);
529  vtkGetMacro(ExplicitAspectRatio, double);
538  vtkSetMacro(UseExplicitAspectRatio, bool);
539  vtkGetMacro(UseExplicitAspectRatio, bool);
540  vtkBooleanMacro(UseExplicitAspectRatio, bool);
553  virtual vtkMatrix4x4* GetProjectionTransformMatrix(double aspect, double nearz, double farz);
554 
566  double aspect, double nearz, double farz);
567 
580  double aspect, double nearz, double farz);
581 
590 
592 
598  vtkGetObjectMacro(UserViewTransform, vtkHomogeneousTransform);
600 
602 
608  vtkGetObjectMacro(UserTransform, vtkHomogeneousTransform);
610 
616  virtual void Render(vtkRenderer*) {}
617 
622 
628 
639  virtual void GetFrustumPlanes(double aspect, double planes[24]);
640 
642 
652  virtual void UpdateIdealShiftScale(double aspect);
653  vtkGetVector3Macro(FocalPointShift, double);
654  vtkGetMacro(FocalPointScale, double);
655  vtkGetVector3Macro(NearPlaneShift, double);
656  vtkGetMacro(NearPlaneScale, double);
657  vtkSetMacro(ShiftScaleThreshold, double);
658  vtkGetMacro(ShiftScaleThreshold, double);
660 
662 
666  double* GetOrientationWXYZ() VTK_SIZEHINT(4);
668 
673  void ComputeViewPlaneNormal();
674 
680  vtkMatrix4x4* GetCameraLightTransformMatrix();
681 
685  virtual void UpdateViewport(vtkRenderer* vtkNotUsed(ren)) {}
686 
688 
691  vtkGetMacro(Stereo, int);
693 
695 
698  vtkSetMacro(LeftEye, int);
699  vtkGetMacro(LeftEye, int);
701 
709 
717 
719 
724  vtkSetMacro(FreezeFocalPoint, bool);
725  vtkGetMacro(FreezeFocalPoint, bool);
727 
729 
732  vtkSetMacro(UseScissor, bool);
733  vtkGetMacro(UseScissor, bool);
735 
737 
740  void SetScissorRect(vtkRecti scissorRect);
741  void GetScissorRect(vtkRecti& scissorRect);
743 
745 
748  vtkGetObjectMacro(Information, vtkInformation);
751 
752 protected:
754  ~vtkCamera() override;
755 
757 
761  virtual void ComputeViewTransform();
763 
767  virtual void ComputeProjectionTransform(double aspect, double nearz, double farz);
768 
772  void ComputeCompositeProjectionTransform(double aspect, double nearz, double farz);
773 
775 
781 
786 
791 
799 
800  double WindowCenter[2];
801  double ObliqueAngles[2];
802  double FocalPoint[3];
803  double Position[3];
804  double ViewUp[3];
805  double ViewAngle;
806  double ClippingRange[2];
807  double EyeAngle;
810  int Stereo;
811  int LeftEye;
812  double Thickness;
813  double Distance;
814  double DirectionOfProjection[3];
815  double ViewPlaneNormal[3];
816  double ViewShear[3];
818 
820 
821  double ScreenBottomLeft[3];
822  double ScreenBottomRight[3];
823  double ScreenTopRight[3];
824  double ScreenCenter[3];
825 
828 
831 
833 
836 
839 
842 
847 
849 
850  double FocalDisk;
852 
853  double FocalPointShift[3];
855  double NearPlaneShift[3];
858 
859  vtkCameraCallbackCommand* UserViewTransformCallbackCommand;
860  friend class vtkCameraCallbackCommand;
861 
862  // ViewingRaysMtime keeps track of camera modifications which will
863  // change the calculation of viewing rays for the camera before it is
864  // transformed to the camera's location and orientation.
868 
870 
871  // Arbitrary extra information associated with this camera.
873 
874 private:
875  vtkCamera(const vtkCamera&) = delete;
876  void operator=(const vtkCamera&) = delete;
877 };
878 
879 VTK_ABI_NAMESPACE_END
880 #endif
supports function callbacks
a virtual camera for 3D rendering
Definition: vtkCamera.h:41
bool UseExplicitProjectionTransformMatrix
Definition: vtkCamera.h:838
void ComputeOffAxisProjectionFrustum()
Compute and use frustum using offaxis method.
vtkInformation * Information
Definition: vtkCamera.h:872
virtual void SetInformation(vtkInformation *)
Set/Get the information object associated with this camera.
vtkMatrix4x4 * EyeTransformMatrix
Definition: vtkCamera.h:829
void Roll(double angle)
Rotate the camera about the direction of projection.
vtkTypeBool ParallelProjection
Definition: vtkCamera.h:808
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:845
void ComputeCameraLightTransform()
void SetViewUp(const double a[3])
Set/Get the view up direction for the camera.
Definition: vtkCamera.h:79
vtkTransform * ViewTransform
Definition: vtkCamera.h:843
double FocalDistance
Definition: vtkCamera.h:851
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:854
bool FreezeFocalPoint
Definition: vtkCamera.h:866
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:59
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:807
void Azimuth(double angle)
Rotate the camera about the view up vector centered at the focal point.
vtkHomogeneousTransform * UserTransform
Definition: vtkCamera.h:834
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:819
vtkMatrix4x4 * ExplicitProjectionTransformMatrix
Definition: vtkCamera.h:837
void SetObliqueAngles(double alpha, double beta)
Get/Set the oblique viewing angles.
double NearPlaneScale
Definition: vtkCamera.h:856
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:811
double EyeSeparation
Definition: vtkCamera.h:827
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.
vtkMatrix4x4 * ProjectionPlaneOrientationMatrix
Definition: vtkCamera.h:830
double * GetOrientation()
Get the orientation of the camera.
vtkMatrix4x4 * ModelTransformMatrix
Definition: vtkCamera.h:832
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:850
double Distance
Definition: vtkCamera.h:813
bool UseExplicitAspectRatio
Definition: vtkCamera.h:841
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:616
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:69
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:812
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:869
virtual vtkMatrix4x4 * GetModelViewTransformMatrix()
Return the model view matrix of model view transform.
vtkTransform * CameraLightTransform
Definition: vtkCamera.h:846
bool UseScissor
Definition: vtkCamera.h:867
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:817
void OrthogonalizeViewUp()
Recompute the ViewUp vector to force it to be perpendicular to camera->focalpoint vector.
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:810
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:805
void SetViewShear(double d[3])
Set/get the shear transform of the viewing frustum.
double ParallelScale
Definition: vtkCamera.h:809
void ComputeScreenOrientationMatrix()
Given screen screen top, bottom left and top right calculate screen orientation.
vtkHomogeneousTransform * UserViewTransform
Definition: vtkCamera.h:835
vtkPerspectiveTransform * ProjectionTransform
Definition: vtkCamera.h:844
vtkCameraCallbackCommand * UserViewTransformCallbackCommand
Definition: vtkCamera.h:859
double ShiftScaleThreshold
Definition: vtkCamera.h:857
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.
double GetOffAxisClippingAdjustment()
Get adjustment to clipping thickness, computed by camera based on the physical size of the screen and...
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:848
double OffAxisClippingAdjustment
Definition: vtkCamera.h:826
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:249
vtkTimeStamp ViewingRaysMTime
Definition: vtkCamera.h:865
double ExplicitAspectRatio
Definition: vtkCamera.h:840
superclass for homogeneous transformations
a simple class to control print indentation
Definition: vtkIndent.h:29
Store vtkAlgorithm input/output information.
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:31
abstract base class for most VTK objects
Definition: vtkObject.h:52
describes a 4x4 matrix transformation
abstract specification for renderers
Definition: vtkRenderer.h:62
record modification and/or execution time
Definition: vtkTimeStamp.h:25
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:50
@ value
Definition: vtkX3D.h:220
@ scale
Definition: vtkX3D.h:229
@ center
Definition: vtkX3D.h:230
@ alpha
Definition: vtkX3D.h:250
int vtkTypeBool
Definition: vtkABI.h:64
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:270
#define VTK_SIZEHINT(...)