CFx SDK Documentation 2026 SP0
Loading...
Searching...
No Matches
TrVisCamera.h
Go to the documentation of this file.
1
2// Copyright (C) 2002-2024, Open Design Alliance (the "Alliance").
3// All rights reserved.
4//
5// This software and its documentation and related materials are owned by
6// the Alliance. The software may only be incorporated into application
7// programs owned by members of the Alliance, subject to a signed
8// Membership Agreement and Supplemental Software License Agreement with the
9// Alliance. The structure and organization of this software are the valuable
10// trade secrets of the Alliance and its suppliers. The software is also
11// protected by copyright law and international treaty provisions. Application
12// programs incorporating this software must include the following statement
13// with their copyright notices:
14//
15// This application incorporates Open Design Alliance software pursuant to a license
16// agreement with Open Design Alliance.
17// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.
18// All rights reserved.
19//
20// By use of this software, its documentation or related materials, you
21// acknowledge and accept the above terms.
23// GLES2 camera
24
25#ifndef ODTRVISCAMERA
26#define ODTRVISCAMERA
27
28#include <set>
29
30#include "TrVisDefs.h"
31#include "TrVisExtentsDef.h"
32#include "TrVisViewportDef.h"
33
35
37{
38public:
41
42 const OdTrVisViewParamsDef& viewParams(bool bUpdated = true) const { if (bUpdated && isModified()) update(); return m_viewParams; }
43 void setViewParams( const OdTrVisViewParamsDef& viewParams, bool bSetModified = false );
44
45 bool isModified() const { return GETBIT( m_flags, kCameraModified ); }
46 // @@@TODO: eliminate this method usage. cameras must be linked with modified objects and must be updated automatically.
48
51
55
59
60 void setContext(const OdTrVisSurfaceDef *pSurface, const OdTrVisViewportShadingDef *pViewportShading,
61 const OdTrVisViewportClipDef *pViewportClip, const OdTrVisExtentsDef *pExtents)
62 { m_pSurfaceDef = pSurface; m_pViewportShadingDef = pViewportShading; m_pViewportClipDef = pViewportClip; m_pExtentsDef = pExtents; }
63 void setContext(const OdTrVisCamera &cam2, const OdTrVisSurfaceDef *pSurface = NULL, const OdTrVisViewportShadingDef *pViewportShading = NULL,
64 const OdTrVisViewportClipDef *pViewportClip = NULL, const OdTrVisExtentsDef *pExtents = NULL)
65 { setContext(pSurface ? pSurface : cam2.m_pSurfaceDef, pViewportShading ? pViewportShading : cam2.m_pViewportShadingDef,
66 pViewportClip ? pViewportClip : cam2.m_pViewportClipDef, pExtents ? pExtents : cam2.m_pExtentsDef);
67 }
68
69 // Produce panning operation
70 virtual void pan(int nX, int nY);
71 // Produce simple zooming operation
72 virtual void zoom(float fDelta);
73 // Zooming around point
74 virtual void zoom(int nX, int nY, float fDelta);
75 // Orbit
83 virtual void orbit(int nX, int nY, OrbitType type = kOrbitPerp, float angle = 0.0f);
84 // Zoom extents
85 virtual void zoomExtents(float coef = 1.03f);
86
87 // Low-level transformation routines
88 virtual void translate(const OdGeVector3d &offset);
89 virtual void rotate(double xAngle, double yAngle, double zAngle, bool bLocalCS = true);
90
91 // Recalculate matrices
92 virtual void update() const;
93
94 //Copy view params
95 virtual void copyViewParams( const OdTrVisCamera* );
96
97 //OdTrVisViewParamsDef accessors
98
99 const OdGePoint3d &viewPosition() const { return m_viewParams.m_viewBasis.origin(); }
100 void setViewPosition( const OdGePoint3d& pt )
101 {
102 m_viewParams.m_viewBasis.setOrigin(pt);
103 setModified();
104 }
105
106 const OdGeVector3d &viewBasisX() const { return m_viewParams.m_viewBasis.xAxis(); }
107 void setViewBasisX(const OdGeVector3d &xBasis)
108 {
109 m_viewParams.m_viewBasis.setXAxis(xBasis);
110 setModified();
111 }
112 const OdGeVector3d &viewBasisY() const { return m_viewParams.m_viewBasis.yAxis(); }
113 void setViewBasisY(const OdGeVector3d &yBasis)
114 {
115 m_viewParams.m_viewBasis.setYAxis(yBasis);
116 setModified();
117 }
118 const OdGeVector3d &viewBasisZ() const { return m_viewParams.m_viewBasis.zAxis(); }
119 void setViewBasisZ(const OdGeVector3d &zBasis)
120 {
121 m_viewParams.m_viewBasis.setZAxis(zBasis);
122 setModified();
123 }
124
125 bool isPerspectiveProjection() const { return m_viewParams.m_bPerspectiveProjection; }
127 {
128 m_viewParams.m_bPerspectiveProjection = p;
129 setModified();
130 }
131
132 double fieldWidth() const { return m_viewParams.m_fieldWidth; }
133 void setFieldWidth( double w )
134 {
135 m_viewParams.m_fieldWidth = w;
136 setModified();
137 }
138
139 double fieldHeight() const { return m_viewParams.m_fieldHeight; }
140 void setFieldHeight( double h )
141 {
142 m_viewParams.m_fieldHeight = h;
143 setModified();
144 }
145
146 double lensLength() const { return m_viewParams.m_lensLength; }
147 void setLensLength( double l )
148 {
149 m_viewParams.m_lensLength = l;
150 setModified();
151 }
152
153 double fovAngle() const;
154 void setFovAngle(double fov);
155
156 const OdGePoint3d &viewTarget() const { return m_viewParams.m_viewTarget; }
157 void setViewTarget( const OdGePoint3d& pt )
158 {
159 m_viewParams.m_viewTarget = pt;
160 setModified();
161 }
162
163 const OdTrVisViewClipped &frontClip() const { return m_viewParams.m_frontClip; }
165 {
166 m_viewParams.m_frontClip = cl;
167 setModified();
168 }
169
170 const OdTrVisViewClipped &backClip() const { return m_viewParams.m_backClip; }
172 {
173 m_viewParams.m_backClip = cl;
174 setModified();
175 }
176
177 bool hasViewClip() const { return backClip().enabled() || frontClip().enabled(); }
178
179 // Matrix accessors
180
181 const OdGeMatrix3d &UnXForm() const { if (isModified()) update(); return m_UnXForm; }
182
184 {
185 return m_viewParams.m_metafileMatrix;
186 }
187 bool hasMetafileMatrix() const
188 {
189 return !m_viewParams.m_metafileMatrix.isEqualTo(OdGeMatrix3d::kIdentity);
190 }
192 {
193 m_viewParams.m_metafileMatrix = m;
194 setModified();
195 }
196
197 // Computed matrix accessors
198
200 {
201 if (isModified()) update();
202 return m_viewParams.m_screenMatrix;
203 }
204
206 {
207 if (isModified()) update();
208 return m_viewParams.m_viewingMatrix;
209 }
210
212 {
213 if (isModified()) update();
214 return m_viewParams.m_projectionMatrix;
215 }
216
218 {
219 if (isModified()) update();
220 return m_viewParams.m_correctionMatrix;
221 }
222
224 {
225 if (isModified()) update();
226 return m_viewParams.m_outputMatrix;
227 }
228
229 // Extended data accessors
230
232 {
233 return projectionMatrix()(2, 3);
234 }
236 {
237 return projectionMatrix()(3, 2);
238 }
240 {
241 return -1.0 / projectionFocalLengthReciprocal();
242 }
244 {
246 }
247
248 long screenWidth() const;
249 long screenHeight() const;
250
251 // Extended viewport calculations
252
253 bool viewportRect(OdGsDCRect &vpRect, bool bClipped = false) const;
254 void applyMetafileXform(bool bSetModified = false) const;
255
256 // Temporary
257
259 void setCameraCumulative( bool bSet ){ SETBIT( m_flags, kCameraCumulative, bSet ); }
260
261protected:
263 {
265 kCameraCumulative = 2 //Viewport parameters override was based onto basic viewport parameters
266 };
270
272 std::set< OdTrVisCamera* > m_childCameras;
273
278
280 std::set< OdTrVisCamera* > m_overlayCameras;
281
283 std::set< OdTrVisCamera* > m_siblingCameras;
284
285protected: //helpers
286 static double computeAspectRatio(const OdGsDCRectDouble& dcRect);
287 double computeFieldWidth(double aspectRatio) const;
288 double computeFieldHeight(double aspectRatio) const;
289 void projectedExtents(OdGePoint2d &extMin, OdGePoint2d &extMax, const OdGeExtents3d &extents) const;
290 static double computeFocalLength(double lensLength, double fieldWidth, double fieldHeight);
291 static void computeSceneDepth(const OdGeMatrix3d &ecsToWcs, const OdGeExtents3d &sceneExtents, double &dNear, double &dFar);
294
295protected:
299
301
303
305 {
306 if( m_siblingCameras.empty() ) return NULL;
307 return *(m_siblingCameras.begin());
308 }
309
310 void setModified(bool modified = true) const;
311
312 const OdGeExtents3d &extents() const
313 {
315 return m_pExtentsDef->preferRealExtents();
316 }
317};
318
319#endif
unsigned char OdUInt8
bool OdZero(double x, double tol=1.e-10)
Definition OdaDefs.h:532
#define SETBIT(flags, bit, value)
Definition OdaDefs.h:516
#define GETBIT(flags, bit)
Definition OdaDefs.h:517
static GE_STATIC_EXPORT const OdGeExtents3d kInvalid
Definition GeExtents3d.h:65
static GE_STATIC_EXPORT const OdGeMatrix3d kIdentity
Definition GeMatrix3d.h:97
OdUInt8 m_flags
bool cameraCumulative() const
OdTrVisCamera * parentCamera() const
Definition TrVisCamera.h:50
std::set< OdTrVisCamera * > m_siblingCameras
double projectionFocalLength() const
void setViewBasisY(const OdGeVector3d &yBasis)
void setOverlayOwnerCamera(OdTrVisCamera *)
const OdGeMatrix3d & projectionMatrix() const
void setChildCamera(OdTrVisCamera *)
double projectionFocalLengthReciprocal() const
void applyMetafileXform(bool bSetModified=false) const
void setOverlayCamera(OdTrVisCamera *)
void setFovAngle(double fov)
std::set< OdTrVisCamera * > m_childCameras
OdTrVisCamera * m_pOverlayOwnerCamera
void setViewBasisX(const OdGeVector3d &xBasis)
const OdGeMatrix3d & metafileMatrix() const
const OdTrVisExtentsDef * m_pExtentsDef
virtual void copyViewParams(const OdTrVisCamera *)
const OdGePoint3d & viewTarget() const
void setPerspectiveProjection(bool p)
const OdGeMatrix3d & outputMatrix() const
void setCameraCumulative(bool bSet)
void preComputeViewportDefMatrices() const
const OdGeMatrix3d & viewingMatrix() const
bool hasViewClip() const
void projectedExtents(OdGePoint2d &extMin, OdGePoint2d &extMax, const OdGeExtents3d &extents) const
void removeOverlayCamera(OdTrVisCamera *)
void setMetafileMatrix(const OdGeMatrix3d &m)
const OdGeVector3d & viewBasisZ() const
void setContext(const OdTrVisSurfaceDef *pSurface, const OdTrVisViewportShadingDef *pViewportShading, const OdTrVisViewportClipDef *pViewportClip, const OdTrVisExtentsDef *pExtents)
Definition TrVisCamera.h:60
void setParentCamera(OdTrVisCamera *)
bool viewportRect(OdGsDCRect &vpRect, bool bClipped=false) const
const OdTrVisViewClipped & frontClip() const
void setSiblingCamera(OdTrVisCamera *)
bool isPerspectiveProjection() const
const OdGeExtents3d & extents() const
double fieldWidth() const
virtual void zoomExtents(float coef=1.03f)
OdTrVisCamera * m_pParentCamera
const OdTrVisViewportClipDef * m_pViewportClipDef
virtual void translate(const OdGeVector3d &offset)
virtual void zoom(int nX, int nY, float fDelta)
double fieldHeight() const
static void computeSceneDepth(const OdGeMatrix3d &ecsToWcs, const OdGeExtents3d &sceneExtents, double &dNear, double &dFar)
void setModified(bool modified=true) const
void setViewPosition(const OdGePoint3d &pt)
static double computeFocalLength(double lensLength, double fieldWidth, double fieldHeight)
void setBackClip(const OdTrVisViewClipped &cl)
virtual void orbit(int nX, int nY, OrbitType type=kOrbitPerp, float angle=0.0f)
const OdGeMatrix3d & UnXForm() const
const OdGePoint3d & viewPosition() const
Definition TrVisCamera.h:99
void setFieldWidth(double w)
void removeChildCamera(OdTrVisCamera *)
OdTrVisCamera * overlayOwnerCamera() const
Definition TrVisCamera.h:53
double fovAngle() const
void setContext(const OdTrVisCamera &cam2, const OdTrVisSurfaceDef *pSurface=NULL, const OdTrVisViewportShadingDef *pViewportShading=NULL, const OdTrVisViewportClipDef *pViewportClip=NULL, const OdTrVisExtentsDef *pExtents=NULL)
Definition TrVisCamera.h:63
const OdGeVector3d & viewBasisX() const
const OdGeVector3d & viewBasisY() const
void setFrontClip(const OdTrVisViewClipped &cl)
virtual void pan(int nX, int nY)
void setFieldHeight(double h)
OdTrVisViewParamsDef m_viewParams
double lensLength() const
OdTrVisCamera * m_pSiblingOwnerCamera
long screenWidth() const
OdGeMatrix3d computeProjectionMatrix(const OdGsDCRectDouble &dcRect, const OdTrVisViewportShadingDef *sets, const OdGeExtents3d &sceneExtents) const
void removeSiblingCamera(OdTrVisCamera *)
long screenHeight() const
double computeFieldHeight(double aspectRatio) const
virtual void zoom(float fDelta)
const OdGeMatrix3d & correctionMatrix() const
bool hasMetafileMatrix() const
virtual void update() const
OdTrVisCamera * siblingOwnerCamera() const
Definition TrVisCamera.h:57
bool isModified() const
Definition TrVisCamera.h:45
const OdGeMatrix3d & screenMatrix() const
OdGeMatrix3d m_UnXForm
virtual void rotate(double xAngle, double yAngle, double zAngle, bool bLocalCS=true)
double projectionScreenDepth() const
static double computeAspectRatio(const OdGsDCRectDouble &dcRect)
void markModified()
Definition TrVisCamera.h:47
void setSiblingOwnerCamera(OdTrVisCamera *)
const OdTrVisViewClipped & backClip() const
OdTrVisCamera * sibling()
const OdTrVisViewParamsDef & viewParams(bool bUpdated=true) const
Definition TrVisCamera.h:42
double computeFieldWidth(double aspectRatio) const
const OdTrVisSurfaceDef * m_pSurfaceDef
const OdTrVisViewportShadingDef * m_pViewportShadingDef
std::set< OdTrVisCamera * > m_overlayCameras
bool projectionPerspective() const
void setLensLength(double l)
void setViewParams(const OdTrVisViewParamsDef &viewParams, bool bSetModified=false)
static OdGeMatrix3d computeCorrectionMatrix(const OdGsDCRectDouble &dcRect, double screenWidth, double screenHeight)
void setViewBasisZ(const OdGeVector3d &zBasis)
void setViewTarget(const OdGePoint3d &pt)
GLfloat GLfloat GLfloat GLfloat w
Definition gles2_ext.h:320
GLuint GLsizei GLsizei GLint GLenum * type
Definition gles2_ext.h:274
GLintptr offset
Definition gles2_ext.h:183