Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
QSSGRenderCamera Struct Reference

#include <qssgrendercamera_p.h>

+ Inheritance diagram for QSSGRenderCamera:
+ Collaboration diagram for QSSGRenderCamera:

Public Types

enum class  DirtyFlag : quint8 { CameraDirty = 0x1 }
 
using FlagT = std::underlying_type_t<DirtyFlag>
 
- Public Types inherited from QSSGRenderNode
enum class  LocalState : quint8 { Active = 1 << 0 , Pickable = 1 << 1 }
 
enum class  GlobalState : quint8 { Active = 1 << 2 , Pickable = 1 << 3 }
 
enum class  DirtyFlag : quint32 {
  TransformDirty = 1 << 4 , OpacityDirty = 1 << 5 , ActiveDirty = 1 << 6 , PickableDirty = 1 << 7 ,
  SubNodeDirty = 1 << 8 , GlobalValuesDirty = TransformDirty | OpacityDirty | ActiveDirty | PickableDirty , DirtyMask = GlobalValuesDirty | SubNodeDirty
}
 
using FlagT = std::underlying_type_t<DirtyFlag>
 
using ChildList = QSSGInvasiveLinkedList<QSSGRenderNode, &QSSGRenderNode::previousSibling, &QSSGRenderNode::nextSibling>
 
- Public Types inherited from QSSGRenderGraphObject
enum  BaseType : quint32 {
  Node = 0x1000 , Light = 0x2000 , Camera = 0x4000 , Renderable = 0x8000 ,
  Resource = 0x10000 , Material = 0x20000 , Texture = 0x40000 , Extension = 0x80000 ,
  User = 0x80000000
}
 
enum class  Type : quint32 {
  Unknown = 0 , Node = BaseType::Node , Layer , Joint ,
  Skeleton , ImportScene , ReflectionProbe , DirectionalLight = BaseType::Light | BaseType::Node ,
  PointLight , SpotLight , OrthographicCamera = BaseType::Camera | BaseType::Node , PerspectiveCamera ,
  CustomFrustumCamera , CustomCamera , Model = BaseType::Renderable | BaseType::Node , Item2D ,
  Particles , SceneEnvironment = BaseType::Resource , Effect , Geometry ,
  TextureData , MorphTarget , ModelInstance , ModelBlendParticle ,
  ResourceLoader , DefaultMaterial = BaseType::Material | BaseType::Resource , PrincipledMaterial , CustomMaterial ,
  SpecularGlossyMaterial , Skin , Image2D = BaseType::Texture | BaseType::Resource , ImageCube ,
  RenderExtension = BaseType::Extension
}
 
enum class  Flags : quint32 { HasGraphicsResources = 0x1 }
 
using TypeT = std::underlying_type_t<Type>
 
using FlagT = std::underlying_type_t<Flags>
 

Public Member Functions

 QSSGRenderCamera (QSSGRenderGraphObject::Type type)
 
QMatrix3x3 getLookAtMatrix (const QVector3D &inUpDir, const QVector3D &inDirection) const
 
void lookAt (const QVector3D &inCameraPos, const QVector3D &inUpDir, const QVector3D &inTargetPos, const QVector3D &pivot)
 
QSSGCameraGlobalCalculationResult calculateGlobalVariables (const QRectF &inViewport)
 
bool calculateProjection (const QRectF &inViewport)
 
bool computeFrustumOrtho (const QRectF &inViewport)
 
float getOrthographicScaleFactor (const QRectF &inViewport) const
 
bool computeFrustumPerspective (const QRectF &inViewport)
 
bool computeCustomFrustum (const QRectF &inViewport)
 
void calculateViewProjectionMatrix (QMatrix4x4 &outMatrix) const
 
void calculateViewProjectionWithoutTranslation (float near, float far, QMatrix4x4 &outMatrix) const
 
QSSGRenderRay unproject (const QVector2D &inLayerRelativeMouseCoords, const QRectF &inViewport) const
 
QVector3D unprojectToPosition (const QVector3D &inGlobalPos, const QSSGRenderRay &inRay) const
 
float verticalFov (float aspectRatio) const
 
float verticalFov (const QRectF &inViewport) const
 
bool isDirty (DirtyFlag dirtyFlag=DirtyMask) const
 
void markDirty (DirtyFlag dirtyFlag)
 
void clearDirty (DirtyFlag dirtyFlag)
 
float getLevelOfDetailMultiplier () const
 
- Public Member Functions inherited from QSSGRenderNode
 QSSGRenderNode ()
 
 QSSGRenderNode (Type type)
 
 ~QSSGRenderNode () override
 
void markDirty (DirtyFlag dirtyFlag)
 
void clearDirty (DirtyFlag dirtyFlag)
 
constexpr bool isDirty (DirtyFlag dirtyFlag=DirtyFlag::DirtyMask) const
 
void setState (LocalState state, bool on=true)
 
constexpr bool getLocalState (LocalState stateFlag) const
 
constexpr bool getGlobalState (GlobalState stateFlag) const
 
void addChild (QSSGRenderNode &inChild)
 
void removeChild (QSSGRenderNode &inChild)
 
void removeFromGraph ()
 
bool calculateGlobalVariables ()
 
QSSGBounds3 getBounds (QSSGBufferManager &inManager, bool inIncludeChildren=true) const
 
QSSGBounds3 getChildBounds (QSSGBufferManager &inManager) const
 
QVector3D getGlobalPos () const
 
QVector3D getGlobalPivot () const
 
QVector3D getDirection () const
 
QVector3D getScalingCorrectDirection () const
 
void calculateMVPAndNormalMatrix (const QMatrix4x4 &inViewProjection, QMatrix4x4 &outMVP, QMatrix3x3 &outNormalMatrix) const
 
QMatrix3x3 calculateNormalMatrix () const
 
- Public Member Functions inherited from QSSGRenderGraphObject
bool hasGraphicsResources () const noexcept
 
virtual Q_QUICK3D_PROFILE_ID_ ~QSSGRenderGraphObject ()
 

Static Public Member Functions

static void calculateViewProjectionMatrix (const QMatrix4x4 &globalTransform, const QMatrix4x4 &projection, QMatrix4x4 &outMatrix)
 
- Static Public Member Functions inherited from QSSGRenderNode
static QMatrix4x4 calculateTransformMatrix (QVector3D position, QVector3D scale, QVector3D pivot, QQuaternion rotation)
 
static void calculateMVPAndNormalMatrix (const QMatrix4x4 &globalTransfor, const QMatrix4x4 &inViewProjection, QMatrix4x4 &outMVP, QMatrix3x3 &outNormalMatrix)
 
static float signedSquared (float val)
 
- Static Public Member Functions inherited from QSSGRenderGraphObject
static constexpr bool isNodeType (Type type) noexcept
 
static constexpr bool isLight (Type type) noexcept
 
static constexpr bool isCamera (Type type) noexcept
 
static constexpr bool isMaterial (Type type) noexcept
 
static constexpr bool isTexture (Type type) noexcept
 
static constexpr bool isRenderable (Type type) noexcept
 
static constexpr bool isResource (Type type) noexcept
 
static constexpr bool isExtension (Type type) noexcept
 
static constexpr bool isUserType (Type type) noexcept
 

Public Attributes

float clipNear
 
float clipFar
 
float fov
 
bool fovHorizontal
 
float top = 0.0f
 
float bottom = 0.0f
 
float left = 0.0f
 
float right = 0.0f
 
float horizontalMagnification = 1.0f
 
float verticalMagnification = 1.0f
 
float dpr = 1.0f
 
QMatrix4x4 projection
 
QVector2D frustumScale
 
bool enableFrustumClipping
 
FlagT cameraDirtyFlags = 0
 
float levelOfDetailPixelThreshold = 1.0
 
QRectF previousInViewport
 
- Public Attributes inherited from QSSGRenderNode
QVector3D pivot
 
int staticFlags = 0
 
float localOpacity = 1.0f
 
FlagT flags { FlagT(DirtyFlag::GlobalValuesDirty) | FlagT(LocalState::Active) }
 
QMatrix4x4 localTransform
 
QMatrix4x4 globalTransform
 
QMatrix4x4 localInstanceTransform
 
QMatrix4x4 globalInstanceTransform
 
float globalOpacity = 1.0f
 
QSSGRenderNodeparent = nullptr
 
QSSGRenderNodenextSibling = nullptr
 
QSSGRenderNodepreviousSibling = nullptr
 
QSSGRenderNodeinstanceRoot = nullptr
 
quint32 dfsIndex = 0
 
ChildList children
 
QString debugObjectName
 
- Public Attributes inherited from QSSGRenderGraphObject
const Type type
 
FlagT flags { 0 }
 

Static Public Attributes

static constexpr DirtyFlag DirtyMask { std::numeric_limits<FlagT>::max() }
 
- Static Public Attributes inherited from QSSGRenderNode
static constexpr QVector3D initScale { 1.0f, 1.0f, 1.0f }
 

Additional Inherited Members

- Protected Member Functions inherited from QSSGRenderGraphObject
 QSSGRenderGraphObject (QSSGRenderGraphObject::Type inType)
 
 QSSGRenderGraphObject (QSSGRenderGraphObject::Type inType, FlagT inFlags)
 

Detailed Description

Definition at line 34 of file qssgrendercamera_p.h.

Member Typedef Documentation

◆ FlagT

using QSSGRenderCamera::FlagT = std::underlying_type_t<DirtyFlag>

Definition at line 40 of file qssgrendercamera_p.h.

Member Enumeration Documentation

◆ DirtyFlag

enum class QSSGRenderCamera::DirtyFlag : quint8
strong
Enumerator
CameraDirty 

Definition at line 36 of file qssgrendercamera_p.h.

Constructor & Destructor Documentation

◆ QSSGRenderCamera()

QSSGRenderCamera::QSSGRenderCamera ( QSSGRenderGraphObject::Type type)
explicit

Definition at line 27 of file qssgrendercamera.cpp.

References CameraDirty, QSSGRenderGraphObject::isCamera(), markDirty(), and Q_ASSERT.

+ Here is the call graph for this function:

Member Function Documentation

◆ calculateGlobalVariables()

QSSGCameraGlobalCalculationResult QSSGRenderCamera::calculateGlobalVariables ( const QRectF & inViewport)

Definition at line 40 of file qssgrendercamera.cpp.

References QSSGRenderNode::calculateGlobalVariables(), and calculateProjection().

Referenced by QQuick3DCamera::updateGlobalVariables().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ calculateProjection()

bool QSSGRenderCamera::calculateProjection ( const QRectF & inViewport)

Definition at line 46 of file qssgrendercamera.cpp.

References CameraDirty, clearDirty(), computeCustomFrustum(), computeFrustumOrtho(), computeFrustumPerspective(), QMatrix4x4::data(), frustumScale, isDirty(), previousInViewport, projection, QVector2D::setX(), and QVector2D::setY().

Referenced by calculateGlobalVariables().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ calculateViewProjectionMatrix() [1/2]

void QSSGRenderCamera::calculateViewProjectionMatrix ( const QMatrix4x4 & globalTransform,
const QMatrix4x4 & projection,
QMatrix4x4 & outMatrix )
static

Definition at line 101 of file qssgrendercamera.cpp.

References QMatrix4x4::column(), QSSGRenderNode::globalTransform, QMatrix4x4::inverted(), QVector4D::normalized(), projection, and Qt::Uninitialized.

Referenced by QSSGCameraHelpers::getViewProjectionMatrix().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ calculateViewProjectionMatrix() [2/2]

void QSSGRenderCamera::calculateViewProjectionMatrix ( QMatrix4x4 & outMatrix) const

Definition at line 160 of file qssgrendercamera.cpp.

References QMatrix4x4::column(), QSSGRenderNode::globalTransform, QMatrix4x4::inverted(), QVector4D::normalized(), projection, and Qt::Uninitialized.

+ Here is the call graph for this function:

◆ calculateViewProjectionWithoutTranslation()

void QSSGRenderCamera::calculateViewProjectionWithoutTranslation ( float near,
float far,
QMatrix4x4 & outMatrix ) const

Definition at line 170 of file qssgrendercamera.cpp.

References clipFar, clipNear, QMatrix4x4::column(), QSSGRenderNode::globalTransform, QVector4D::normalized(), projection, qFuzzyIsNull(), qWarning, and Qt::Uninitialized.

+ Here is the call graph for this function:

◆ clearDirty()

void QSSGRenderCamera::clearDirty ( DirtyFlag dirtyFlag)

Definition at line 250 of file qssgrendercamera.cpp.

References cameraDirtyFlags, QSSGRenderNode::clearDirty(), and QSSGRenderNode::SubNodeDirty.

Referenced by calculateProjection().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ computeCustomFrustum()

bool QSSGRenderCamera::computeCustomFrustum ( const QRectF & inViewport)

Definition at line 93 of file qssgrendercamera.cpp.

References clipFar, clipNear, QMatrix4x4::frustum(), projection, Q_UNUSED, and QMatrix4x4::setToIdentity().

Referenced by calculateProjection().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ computeFrustumOrtho()

bool QSSGRenderCamera::computeFrustumOrtho ( const QRectF & inViewport)

Compute the projection matrix for a orthographic camera

Returns
true if the computed projection matrix is valid

Definition at line 118 of file qssgrendercamera.cpp.

References clipFar, clipNear, dpr, horizontalMagnification, QMatrix4x4::ortho(), projection, and verticalMagnification.

Referenced by calculateProjection().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ computeFrustumPerspective()

bool QSSGRenderCamera::computeFrustumPerspective ( const QRectF & inViewport)

Compute the projection matrix for a perspective camera

Returns
true if the computed projection matrix is valid

Definition at line 86 of file qssgrendercamera.cpp.

References clipFar, clipNear, QMatrix4x4::perspective(), projection, qRadiansToDegrees(), and verticalFov().

Referenced by calculateProjection().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getLevelOfDetailMultiplier()

float QSSGRenderCamera::getLevelOfDetailMultiplier ( ) const

Definition at line 286 of file qssgrendercamera.cpp.

References getViewportHalfExtents(), getZNear(), and projection.

+ Here is the call graph for this function:

◆ getLookAtMatrix()

QMatrix3x3 QSSGRenderCamera::getLookAtMatrix ( const QVector3D & inUpDir,
const QVector3D & inDirection ) const

◆ getOrthographicScaleFactor()

float QSSGRenderCamera::getOrthographicScaleFactor ( const QRectF & inViewport) const

Definition at line 127 of file qssgrendercamera.cpp.

References horizontalMagnification, Q_UNUSED, qMax(), and verticalMagnification.

+ Here is the call graph for this function:

◆ isDirty()

bool QSSGRenderCamera::isDirty ( DirtyFlag dirtyFlag = DirtyMask) const
inline

Definition at line 113 of file qssgrendercamera_p.h.

References QSSGRenderNode::isDirty().

Referenced by calculateProjection().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ lookAt()

void QSSGRenderCamera::lookAt ( const QVector3D & inCameraPos,
const QVector3D & inUpDir,
const QVector3D & inTargetPos,
const QVector3D & pivot )

◆ markDirty()

void QSSGRenderCamera::markDirty ( DirtyFlag dirtyFlag)

Definition at line 244 of file qssgrendercamera.cpp.

References cameraDirtyFlags, QSSGRenderNode::markDirty(), and QSSGRenderNode::SubNodeDirty.

Referenced by QSSGRenderCamera().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ unproject()

QSSGRenderRay QSSGRenderCamera::unproject ( const QVector2D & inLayerRelativeMouseCoords,
const QRectF & inViewport ) const

Definition at line 188 of file qssgrendercamera.cpp.

References QSSGRenderNode::calculateNormalMatrix(), frustumScale, QSSGRenderNode::globalTransform, QSSGUtils::rect::relativeToNormalizedCoordinates(), QSSGUtils::mat33::transform(), QSSGUtils::mat44::transform(), QVector2D::x(), and QVector2D::y().

+ Here is the call graph for this function:

◆ unprojectToPosition()

QVector3D QSSGRenderCamera::unprojectToPosition ( const QVector3D & inGlobalPos,
const QSSGRenderRay & inRay ) const

Definition at line 225 of file qssgrendercamera.cpp.

References QVector3D::dotProduct(), QSSGRenderNode::getDirection(), and QSSGRenderRay::intersect().

+ Here is the call graph for this function:

◆ verticalFov() [1/2]

float QSSGRenderCamera::verticalFov ( const QRectF & inViewport) const

Definition at line 239 of file qssgrendercamera.cpp.

References verticalFov().

+ Here is the call graph for this function:

◆ verticalFov() [2/2]

float QSSGRenderCamera::verticalFov ( float aspectRatio) const

Definition at line 234 of file qssgrendercamera.cpp.

References fov, fovHorizontal, qAtan(), and qTan().

Referenced by computeFrustumPerspective(), and verticalFov().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ bottom

float QSSGRenderCamera::bottom = 0.0f

Definition at line 52 of file qssgrendercamera_p.h.

◆ cameraDirtyFlags

FlagT QSSGRenderCamera::cameraDirtyFlags = 0

Definition at line 66 of file qssgrendercamera_p.h.

Referenced by clearDirty(), and markDirty().

◆ clipFar

◆ clipNear

float QSSGRenderCamera::clipNear

◆ DirtyMask

constexpr DirtyFlag QSSGRenderCamera::DirtyMask { std::numeric_limits<FlagT>::max() }
staticconstexpr

Definition at line 42 of file qssgrendercamera_p.h.

◆ dpr

float QSSGRenderCamera::dpr = 1.0f

Definition at line 59 of file qssgrendercamera_p.h.

Referenced by computeFrustumOrtho().

◆ enableFrustumClipping

bool QSSGRenderCamera::enableFrustumClipping

Definition at line 65 of file qssgrendercamera_p.h.

◆ fov

float QSSGRenderCamera::fov

Definition at line 48 of file qssgrendercamera_p.h.

Referenced by verticalFov().

◆ fovHorizontal

bool QSSGRenderCamera::fovHorizontal

Definition at line 49 of file qssgrendercamera_p.h.

Referenced by verticalFov().

◆ frustumScale

QVector2D QSSGRenderCamera::frustumScale

Definition at line 64 of file qssgrendercamera_p.h.

Referenced by calculateProjection(), and unproject().

◆ horizontalMagnification

float QSSGRenderCamera::horizontalMagnification = 1.0f

Definition at line 56 of file qssgrendercamera_p.h.

Referenced by computeFrustumOrtho(), and getOrthographicScaleFactor().

◆ left

float QSSGRenderCamera::left = 0.0f

Definition at line 53 of file qssgrendercamera_p.h.

◆ levelOfDetailPixelThreshold

float QSSGRenderCamera::levelOfDetailPixelThreshold = 1.0

Definition at line 68 of file qssgrendercamera_p.h.

◆ previousInViewport

QRectF QSSGRenderCamera::previousInViewport

Definition at line 70 of file qssgrendercamera_p.h.

Referenced by calculateProjection().

◆ projection

◆ right

float QSSGRenderCamera::right = 0.0f

Definition at line 54 of file qssgrendercamera_p.h.

◆ top

float QSSGRenderCamera::top = 0.0f

Definition at line 51 of file qssgrendercamera_p.h.

◆ verticalMagnification

float QSSGRenderCamera::verticalMagnification = 1.0f

Definition at line 57 of file qssgrendercamera_p.h.

Referenced by computeFrustumOrtho(), and getOrthographicScaleFactor().


The documentation for this struct was generated from the following files: