| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- #pragma once
- //##########################################################################
- //# #
- //# CLOUDCOMPARE #
- //# #
- //# This program is free software; you can redistribute it and/or modify #
- //# it under the terms of the GNU General Public License as published by #
- //# the Free Software Foundation; version 2 or later of the License. #
- //# #
- //# This program is distributed in the hope that it will be useful, #
- //# but WITHOUT ANY WARRANTY; without even the implied warranty of #
- //# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
- //# GNU General Public License for more details. #
- //# #
- //# COPYRIGHT: EDF R&D / TELECOM ParisTech (ENST-TSI) #
- //# #
- //##########################################################################
- //Local
- #include "ccSerializableObject.h"
- #include "ccGLMatrix.h"
- //CCCoreLib
- #include <CCGeom.h>
- class QRect;
- //! Standard parameters for GL displays/viewports
- class QCC_DB_LIB_API ccViewportParameters : public ccSerializableObject
- {
- public: //functions
- //! Default constructor
- ccViewportParameters();
- //! Copy constructor
- ccViewportParameters(const ccViewportParameters& params);
- //inherited from ccSerializableObject
- bool isSerializable() const override { return true; }
- bool toFile(QFile& out, short dataVersion) const override;
- bool fromFile(QFile& in, short dataVersion, int flags, LoadedIDMap& oldToNewIDMap) override;
- short minimumFileVersion() const override;
- //! Sets the pivot point (for object-centered view mode)
- void setPivotPoint(const CCVector3d& P, bool autoUpdateFocal);
- //! Returns the pivot point (for object-centered view mode)
- const CCVector3d& getPivotPoint() const { return pivotPoint; }
- //! Sets the camera center
- //* _
- void setCameraCenter(const CCVector3d& C, bool autoUpdateFocal);
- //! Returns the camera center
- const CCVector3d& getCameraCenter() const { return cameraCenter; }
- //! Sets the 'focal' distance
- /** \warning changes the camera center position in object-centered view mode
- **/
- void setFocalDistance(double distance);
- //! Computes the 'focal' distance
- double getFocalDistance() const { return focalDistance; }
- //! Computes the view matrix
- ccGLMatrixd computeViewMatrix() const;
- //! Computes the scale matrix
- ccGLMatrixd computeScaleMatrix(const QRect& glViewport) const;
- //! Returns the viewing direction
- /** This is the direction normal to the screen
- (pointing 'forward') in the world coordinate system.
- **/
- CCVector3d getViewDir() const;
- //! Returns the up direction
- /** This is the vertical direction of the screen
- (pointing 'upward') in the world coordinate system.
- **/
- CCVector3d getUpDir() const;
- //! Returns the view rotation 'center'
- /** The rotation center is defined as:
- - the pivot point in object-centered view mode
- - the camera center in viewer-centered view mode
- **/
- const CCVector3d& getRotationCenter() const;
- //! Computes the ratio 'distance to half width' (based on the current FOV)
- /** Half width = ratio * distance = tan(fov / 2) * distance
- **/
- double computeDistanceToHalfWidthRatio() const;
- //! Computes the ratio 'distance to width' (based on the current FOV)
- /** Width = ratio * distance = (2 * tan(fov / 2)) * distance
- **/
- double computeDistanceToWidthRatio() const;
- //! Computes the object 'width' at the 'focal' distance
- double computeWidthAtFocalDist() const;
- //! Computes the pixel size at the 'focal' distance
- double computePixelSize(int glWidth) const;
- //! Logs the viewport parameters
- void log() const;
- public: //variables
- //! Visualization matrix (rotation only)
- ccGLMatrixd viewMat;
- //! Point size
- float defaultPointSize;
- //! Line width
- float defaultLineWidth;
- //! Perspective view state
- bool perspectiveView;
- //! Whether view is centered on displayed scene (true) or on the user eye (false)
- /** Always true for ortho. mode.
- **/
- bool objectCenteredView;
- //! Theoretical perspective 'zNear' relative position
- double zNearCoef;
-
- //! Depth of the near clipping plane (if any)
- double nearClippingDepth;
- //! Depth of the far clipping plane (if any)
- double farClippingDepth;
-
- //! Current zNear value
- double zNear;
- //! Current zFar value
- double zFar;
-
- //! Camera F.O.V. (field of view) in degrees
- float fov_deg;
- //! Camera aspect ratio
- float cameraAspectRatio;
- protected:
- //! Focal distance
- double focalDistance;
- //! Rotation pivot point (for object-centered view modes)
- CCVector3d pivotPoint;
- //! Camera center
- CCVector3d cameraCenter;
- };
|