CameraComponent.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. // Copyright (C) 2009-2023, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Scene/Components/SceneComponent.h>
  7. #include <AnKi/Scene/Frustum.h>
  8. #include <AnKi/Core/CVarSet.h>
  9. namespace anki {
  10. /// @addtogroup scene
  11. /// @{
  12. /// Perspective camera component.
  13. class CameraComponent : public SceneComponent
  14. {
  15. ANKI_SCENE_COMPONENT(CameraComponent)
  16. public:
  17. CameraComponent(SceneNode* node);
  18. ~CameraComponent();
  19. void setNear(F32 near)
  20. {
  21. if(ANKI_SCENE_ASSERT(near > 0.0f))
  22. {
  23. m_frustum.setNear(near);
  24. }
  25. }
  26. F32 getNear() const
  27. {
  28. return m_frustum.getNear();
  29. }
  30. void setFar(F32 far)
  31. {
  32. if(ANKI_SCENE_ASSERT(far > 0.0f))
  33. {
  34. m_frustum.setFar(far);
  35. }
  36. }
  37. F32 getFar() const
  38. {
  39. return m_frustum.getFar();
  40. }
  41. void setFovX(F32 fovx)
  42. {
  43. if(ANKI_SCENE_ASSERT(fovx > 0.0f && fovx < kPi))
  44. {
  45. m_frustum.setFovX(fovx);
  46. }
  47. }
  48. F32 getFovX() const
  49. {
  50. return m_frustum.getFovX();
  51. }
  52. void setFovY(F32 fovy)
  53. {
  54. if(ANKI_SCENE_ASSERT(fovy > 0.0f && fovy < kPi))
  55. {
  56. m_frustum.setFovY(fovy);
  57. }
  58. }
  59. F32 getFovY() const
  60. {
  61. return m_frustum.getFovY();
  62. }
  63. void setPerspective(F32 near, F32 far, F32 fovx, F32 fovy)
  64. {
  65. m_frustum.setPerspective(near, far, fovx, fovy);
  66. }
  67. void setShadowCascadeDistance(U32 cascade, F32 distance)
  68. {
  69. if(ANKI_SCENE_ASSERT(cascade < m_frustum.getShadowCascadeCount()))
  70. {
  71. m_frustum.setShadowCascadeDistance(cascade, distance);
  72. }
  73. }
  74. U32 getShadowCascadeCount() const
  75. {
  76. return m_frustum.getShadowCascadeCount();
  77. }
  78. F32 getShadowCascadeDistance(U32 cascade) const
  79. {
  80. if(ANKI_SCENE_ASSERT(cascade < m_frustum.getShadowCascadeCount()))
  81. {
  82. return m_frustum.getShadowCascadeDistance(cascade);
  83. }
  84. else
  85. {
  86. return 0.0f;
  87. }
  88. }
  89. ANKI_INTERNAL const Frustum& getFrustum() const
  90. {
  91. return m_frustum;
  92. }
  93. ANKI_INTERNAL Frustum& getFrustum()
  94. {
  95. return m_frustum;
  96. }
  97. private:
  98. Frustum m_frustum;
  99. Error update(SceneComponentUpdateInfo& info, Bool& updated) override;
  100. };
  101. /// @}
  102. } // end namespace anki