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
146class vtkInformation;
147class vtkMatrix4x4;
149class vtkRenderer;
150class vtkTransform;
152class vtkCameraCallbackCommand;
153
154class VTKRENDERINGCORE_EXPORT vtkCamera : public vtkObject
155{
156public:
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
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
858protected:
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;
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
980private:
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
virtual vtkMatrix4x4 * GetViewTransformMatrix()
For backward compatibility.
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.
double * GetOrientation()
Get the orientation of the camera.
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
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’.
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.
virtual vtkMatrix4x4 * GetProjectionTransformMatrix(vtkRenderer *ren)
Return the projection transform matrix, which converts from camera coordinates to viewport coordinate...
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.
vtkMatrix4x4 * ModelTransformMatrix
Definition: vtkCamera.h:938
void ShallowCopy(vtkCamera *source)
Copy the properties of ‘source’ into ‘this’.
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.
virtual vtkMatrix4x4 * GetModelViewTransformMatrix()
Return the model view matrix of model view transform.
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.
static vtkCamera * New()
Construct camera instance with its focal point at the origin, and position=(0,0,1).
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 vtkPerspectiveTransform * GetProjectionTransformObject(double aspect, double nearz, double farz)
Return the projection transform matrix, which converts from camera coordinates to viewport coordinate...
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 * GetCompositeProjectionTransformMatrix(double aspect, double nearz, double farz)
Return the concatenation of the ViewTransform and the ProjectionTransform.
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
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
~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.
virtual vtkTransform * GetViewTransformObject()
For backward compatibility.
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 vtkTransform * GetModelViewTransformObject()
Return the model view transform.
virtual void ComputeProjectionTransform(double aspect, double nearz, double farz)
These methods should only be used within vtkCamera.cxx.
virtual vtkMatrix4x4 * GetProjectionTransformMatrix(double aspect, double nearz, double farz)
Return the projection transform matrix, which converts from camera coordinates to viewport coordinate...
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.
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...
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(...)