From ffb6e5d987f1f263aa7c5f9ae740f761dfd90652 Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Tue, 14 May 2024 05:45:15 +0000 Subject: [PATCH 1/7] Set projection matrix for other camera sensors Signed-off-by: Ian Chen --- ogre2/src/Ogre2BoundingBoxCamera.cc | 14 ++++ ogre2/src/Ogre2DepthCamera.cc | 13 ++- ogre2/src/Ogre2SegmentationCamera.cc | 13 +++ ogre2/src/Ogre2ThermalCamera.cc | 13 +++ test/integration/depth_camera.cc | 121 +++++++++++++++++++++++++++ 5 files changed, 173 insertions(+), 1 deletion(-) diff --git a/ogre2/src/Ogre2BoundingBoxCamera.cc b/ogre2/src/Ogre2BoundingBoxCamera.cc index 986a44326..81d6eab5b 100644 --- a/ogre2/src/Ogre2BoundingBoxCamera.cc +++ b/ogre2/src/Ogre2BoundingBoxCamera.cc @@ -464,6 +464,20 @@ void Ogre2BoundingBoxCamera::PreRender() if (!this->dataPtr->ogreRenderTexture) this->CreateBoundingBoxTexture(); + // todo(iche03) Override BaseCamera::SetProjectionMatrix() function + // instead of checking and setting the custom projection matrix here + if (this->dataPtr->ogreCamera && + this->projectionMatrix != gz::math::Matrix4d::Zero) + { + if (this->projectionMatrix != + Ogre2Conversions::Convert( + this->dataPtr->ogreCamera->getProjectionMatrix())) + { + this->dataPtr->ogreCamera->setCustomProjectionMatrix(true, + Ogre2Conversions::Convert(this->projectionMatrix)); + } + } + this->dataPtr->outputBoxes.clear(); } diff --git a/ogre2/src/Ogre2DepthCamera.cc b/ogre2/src/Ogre2DepthCamera.cc index 2f255a421..ece8177ff 100644 --- a/ogre2/src/Ogre2DepthCamera.cc +++ b/ogre2/src/Ogre2DepthCamera.cc @@ -185,7 +185,6 @@ void Ogre2DepthGaussianNoisePass::PreRender() { // This function is similar to Ogre2GaussianNoisePass but duplicated here // for Ogre2DepthCamera - if (!this->gaussianNoiseMat) return; @@ -1056,6 +1055,18 @@ void Ogre2DepthCamera::PreRender() if (!this->dataPtr->ogreCompositorWorkspace) this->CreateWorkspaceInstance(); + // todo(iche03) Override BaseCamera::SetProjectionMatrix() function + // instead of checking and setting the custom projection matrix here + if (this->ogreCamera && + this->projectionMatrix != gz::math::Matrix4d::Zero) + { + if (this->projectionMatrix != + Ogre2Conversions::Convert(this->ogreCamera->getProjectionMatrix())) + { + this->ogreCamera->setCustomProjectionMatrix(true, + Ogre2Conversions::Convert(this->projectionMatrix)); + } + } // Disable color target (set to clear pass) if there are no rgb point cloud // connections diff --git a/ogre2/src/Ogre2SegmentationCamera.cc b/ogre2/src/Ogre2SegmentationCamera.cc index ef0c4e106..88182b0fe 100644 --- a/ogre2/src/Ogre2SegmentationCamera.cc +++ b/ogre2/src/Ogre2SegmentationCamera.cc @@ -164,6 +164,19 @@ void Ogre2SegmentationCamera::PreRender() { if (!this->dataPtr->ogreSegmentationTexture) this->CreateSegmentationTexture(); + + // todo(iche03) Override BaseCamera::SetProjectionMatrix() function + // instead of checking and setting the custom projection matrix here + if (this->ogreCamera && + this->projectionMatrix != gz::math::Matrix4d::Zero) + { + if (this->projectionMatrix != + Ogre2Conversions::Convert(this->ogreCamera->getProjectionMatrix())) + { + this->ogreCamera->setCustomProjectionMatrix(true, + Ogre2Conversions::Convert(this->projectionMatrix)); + } + } } ///////////////////////////////////////////////// diff --git a/ogre2/src/Ogre2ThermalCamera.cc b/ogre2/src/Ogre2ThermalCamera.cc index 11f2d5bcd..cb8df2c52 100644 --- a/ogre2/src/Ogre2ThermalCamera.cc +++ b/ogre2/src/Ogre2ThermalCamera.cc @@ -1130,6 +1130,19 @@ void Ogre2ThermalCamera::PreRender() { if (!this->dataPtr->ogreThermalTexture) this->CreateThermalTexture(); + + // todo(iche03) Override BaseCamera::SetProjectionMatrix() function + // instead of checking and setting the custom projection matrix here + if (this->ogreCamera && + this->projectionMatrix != gz::math::Matrix4d::Zero) + { + if (this->projectionMatrix != + Ogre2Conversions::Convert(this->ogreCamera->getProjectionMatrix())) + { + this->ogreCamera->setCustomProjectionMatrix(true, + Ogre2Conversions::Convert(this->projectionMatrix)); + } + } } ////////////////////////////////////////////////// diff --git a/test/integration/depth_camera.cc b/test/integration/depth_camera.cc index 5e28a00cd..311653cc4 100644 --- a/test/integration/depth_camera.cc +++ b/test/integration/depth_camera.cc @@ -735,3 +735,124 @@ TEST_F(DepthCameraTest, DepthCameraParticles) engine->DestroyScene(scene); } + +///////////////////////////////////////////////// +TEST_F(DepthCameraTest, GZ_UTILS_TEST_DISABLED_ON_WIN32(DepthCameraProjection)) +{ + CHECK_SUPPORTED_ENGINE("ogre2"); + + int imgWidth = 256; + int imgHeight = 256; + double aspectRatio = imgWidth/imgHeight; + + double unitBoxSize = 1.0; + gz::math::Vector3d boxPosition(1.8, 0.0, 0.0); + + gz::rendering::ScenePtr scene = engine->CreateScene("scene"); + ASSERT_NE(nullptr, scene); + + // Create an scene with a box in it + gz::rendering::VisualPtr root = scene->RootVisual(); + + // create box visual + gz::rendering::VisualPtr box = scene->CreateVisual(); + box->AddGeometry(scene->CreateBox()); + box->SetLocalPosition(boxPosition); + box->SetLocalScale(unitBoxSize, unitBoxSize, unitBoxSize); + root->AddChild(box); + { + // Create depth camera + auto depthCamera = scene->CreateDepthCamera("DepthCamera"); + ASSERT_NE(depthCamera, nullptr); + + gz::math::Pose3d testPose(gz::math::Vector3d(0, 0, 0), + gz::math::Quaterniond::Identity); + depthCamera->SetLocalPose(testPose); + + // Set initial camera parameters using a wide horizontal FOV + double farDist = 100.0; + double nearDist = 0.01; + double hfov = 1.5; + depthCamera->SetImageWidth(imgWidth); + EXPECT_EQ(depthCamera->ImageWidth(), + static_cast(imgWidth)); + depthCamera->SetImageHeight(imgHeight); + EXPECT_EQ(depthCamera->ImageHeight(), + static_cast(imgHeight)); + depthCamera->SetFarClipPlane(farDist); + EXPECT_DOUBLE_EQ(depthCamera->FarClipPlane(), farDist); + depthCamera->SetNearClipPlane(nearDist); + EXPECT_DOUBLE_EQ(depthCamera->NearClipPlane(), nearDist); + depthCamera->SetAspectRatio(aspectRatio); + EXPECT_DOUBLE_EQ(depthCamera->AspectRatio(), aspectRatio); + depthCamera->SetHFOV(hfov); + EXPECT_DOUBLE_EQ(depthCamera->HFOV().Radian(), hfov); + + depthCamera->CreateDepthTexture(); + scene->RootVisual()->AddChild(depthCamera); + + // Set a callback on the camera sensor to get a depth camera frame + float *scan = new float[imgHeight * imgWidth]; + gz::common::ConnectionPtr connection = + depthCamera->ConnectNewDepthFrame( + std::bind(&::OnNewDepthFrame, scan, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, + std::placeholders::_4, std::placeholders::_5)); + + g_depthCounter = 0u; + depthCamera->Update(); + scene->SetTime(scene->Time() + std::chrono::milliseconds(16)); + EXPECT_EQ(1u, g_depthCounter); + + float expectedRange = boxPosition.X() - unitBoxSize * 0.5; + unsigned int hasInfValues = 0u; + unsigned int hasBoxValues = 0u; + for (unsigned int i = 0; i < depthCamera->ImageHeight(); ++i) + { + for (unsigned int j = 0; j < depthCamera->ImageWidth(); ++j) + { + float x = scan[i * depthCamera->ImageWidth() + j]; + if (gz::math::equal(expectedRange, x)) + hasBoxValues++; + else if (std::isinf(x)) + hasInfValues++; + else + FAIL() << "Unexpected range value: " << x; + } + } + EXPECT_LT(0u, hasBoxValues); + EXPECT_LT(0u, hasInfValues); + + // Now override with a custom projection matrix + // camera intrinsic parameters + // This projection is computed from a small horizontal FOV + // (hfov = 0.5) + gz::math::Matrix4d projectionMatrix( + 3.91632, 0, 0, 0, + 0, 3.91632, 0, 0, + 0, 0, -1.0002, -0.20002, + 0, 0, -1, 0); + depthCamera->SetProjectionMatrix(projectionMatrix); + depthCamera->Update(); + scene->SetTime(scene->Time() + std::chrono::milliseconds(16)); + EXPECT_EQ(2u, g_depthCounter); + + // The camera should use the updated projection matrix and + // the box should fill the whole image. + // Verify all range values at the expected box range + for (unsigned int i = 0; i < depthCamera->ImageHeight(); ++i) + { + for (unsigned int j = 0; j < depthCamera->ImageWidth(); ++j) + { + float x = scan[i * depthCamera->ImageWidth() + j]; + EXPECT_FLOAT_EQ(expectedRange, x); + } + } + + // Clean up + connection.reset(); + delete [] scan; + } + + engine->DestroyScene(scene); +} From 7c852d0ec3d718ac88a711f740b86f3f1581de87 Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Tue, 14 May 2024 05:58:34 +0000 Subject: [PATCH 2/7] comment Signed-off-by: Ian Chen --- ogre2/src/Ogre2DepthCamera.cc | 1 + test/integration/depth_camera.cc | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ogre2/src/Ogre2DepthCamera.cc b/ogre2/src/Ogre2DepthCamera.cc index ece8177ff..e41cf63a5 100644 --- a/ogre2/src/Ogre2DepthCamera.cc +++ b/ogre2/src/Ogre2DepthCamera.cc @@ -185,6 +185,7 @@ void Ogre2DepthGaussianNoisePass::PreRender() { // This function is similar to Ogre2GaussianNoisePass but duplicated here // for Ogre2DepthCamera + if (!this->gaussianNoiseMat) return; diff --git a/test/integration/depth_camera.cc b/test/integration/depth_camera.cc index 311653cc4..bcbdce376 100644 --- a/test/integration/depth_camera.cc +++ b/test/integration/depth_camera.cc @@ -824,8 +824,7 @@ TEST_F(DepthCameraTest, GZ_UTILS_TEST_DISABLED_ON_WIN32(DepthCameraProjection)) EXPECT_LT(0u, hasInfValues); // Now override with a custom projection matrix - // camera intrinsic parameters - // This projection is computed from a small horizontal FOV + // This projection matrix corresponds to a small horizontal FOV // (hfov = 0.5) gz::math::Matrix4d projectionMatrix( 3.91632, 0, 0, 0, From 343113dd9d423fdd9c7aa9e8bb219951eb345fe3 Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Tue, 14 May 2024 18:08:50 +0000 Subject: [PATCH 3/7] add includes Signed-off-by: Ian Chen --- ogre2/src/Ogre2BoundingBoxCamera.cc | 1 + ogre2/src/Ogre2DepthCamera.cc | 1 + ogre2/src/Ogre2SegmentationCamera.cc | 1 + ogre2/src/Ogre2ThermalCamera.cc | 1 + test/integration/depth_camera.cc | 2 +- 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ogre2/src/Ogre2BoundingBoxCamera.cc b/ogre2/src/Ogre2BoundingBoxCamera.cc index 81d6eab5b..7f98cefb8 100644 --- a/ogre2/src/Ogre2BoundingBoxCamera.cc +++ b/ogre2/src/Ogre2BoundingBoxCamera.cc @@ -31,6 +31,7 @@ #include #include #include +#include #include #include "gz/rendering/RenderTypes.hh" diff --git a/ogre2/src/Ogre2DepthCamera.cc b/ogre2/src/Ogre2DepthCamera.cc index e41cf63a5..2fa1fd7ea 100644 --- a/ogre2/src/Ogre2DepthCamera.cc +++ b/ogre2/src/Ogre2DepthCamera.cc @@ -26,6 +26,7 @@ #include #include #include +#include #include "gz/rendering/RenderTypes.hh" #include "gz/rendering/ogre2/Ogre2Conversions.hh" diff --git a/ogre2/src/Ogre2SegmentationCamera.cc b/ogre2/src/Ogre2SegmentationCamera.cc index 88182b0fe..df17b5a7c 100644 --- a/ogre2/src/Ogre2SegmentationCamera.cc +++ b/ogre2/src/Ogre2SegmentationCamera.cc @@ -19,6 +19,7 @@ #include #include +#include #include "gz/rendering/ogre2/Ogre2Camera.hh" #include "gz/rendering/ogre2/Ogre2Conversions.hh" diff --git a/ogre2/src/Ogre2ThermalCamera.cc b/ogre2/src/Ogre2ThermalCamera.cc index cb8df2c52..665f65e20 100644 --- a/ogre2/src/Ogre2ThermalCamera.cc +++ b/ogre2/src/Ogre2ThermalCamera.cc @@ -43,6 +43,7 @@ #include #include #include +#include #include "gz/rendering/RenderTypes.hh" #include "gz/rendering/ogre2/Ogre2Conversions.hh" diff --git a/test/integration/depth_camera.cc b/test/integration/depth_camera.cc index bcbdce376..403a61b37 100644 --- a/test/integration/depth_camera.cc +++ b/test/integration/depth_camera.cc @@ -743,7 +743,7 @@ TEST_F(DepthCameraTest, GZ_UTILS_TEST_DISABLED_ON_WIN32(DepthCameraProjection)) int imgWidth = 256; int imgHeight = 256; - double aspectRatio = imgWidth/imgHeight; + double aspectRatio = imgWidth / imgHeight; double unitBoxSize = 1.0; gz::math::Vector3d boxPosition(1.8, 0.0, 0.0); From 0aeacd99d5413b67f9234f63598845d2fed9b04b Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Tue, 14 May 2024 18:11:11 +0000 Subject: [PATCH 4/7] test overriding SetProjectionMatrix function Signed-off-by: Ian Chen --- .../gz/rendering/ogre2/Ogre2DepthCamera.hh | 4 ++++ ogre2/src/Ogre2DepthCamera.cc | 21 +++++++------------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/ogre2/include/gz/rendering/ogre2/Ogre2DepthCamera.hh b/ogre2/include/gz/rendering/ogre2/Ogre2DepthCamera.hh index 9d2a4cfc1..5646c1b20 100644 --- a/ogre2/include/gz/rendering/ogre2/Ogre2DepthCamera.hh +++ b/ogre2/include/gz/rendering/ogre2/Ogre2DepthCamera.hh @@ -133,6 +133,10 @@ namespace gz // Documentation inherited. public: virtual Ogre::Camera *OgreCamera() const override; + // Documentation inherited. + public: virtual void SetProjectionMatrix( + const math::Matrix4d &_matrix) override; + /// \brief Get a pointer to the render target. /// \return Pointer to the render target protected: virtual RenderTargetPtr RenderTarget() const override; diff --git a/ogre2/src/Ogre2DepthCamera.cc b/ogre2/src/Ogre2DepthCamera.cc index 2fa1fd7ea..eeca92cfe 100644 --- a/ogre2/src/Ogre2DepthCamera.cc +++ b/ogre2/src/Ogre2DepthCamera.cc @@ -1057,19 +1057,6 @@ void Ogre2DepthCamera::PreRender() if (!this->dataPtr->ogreCompositorWorkspace) this->CreateWorkspaceInstance(); - // todo(iche03) Override BaseCamera::SetProjectionMatrix() function - // instead of checking and setting the custom projection matrix here - if (this->ogreCamera && - this->projectionMatrix != gz::math::Matrix4d::Zero) - { - if (this->projectionMatrix != - Ogre2Conversions::Convert(this->ogreCamera->getProjectionMatrix())) - { - this->ogreCamera->setCustomProjectionMatrix(true, - Ogre2Conversions::Convert(this->projectionMatrix)); - } - } - // Disable color target (set to clear pass) if there are no rgb point cloud // connections if (this->dataPtr->colorTargetDef) @@ -1384,3 +1371,11 @@ Ogre::Camera *Ogre2DepthCamera::OgreCamera() const { return this->ogreCamera; } + +////////////////////////////////////////////////// +void Ogre2DepthCamera::SetProjectionMatrix(const math::Matrix4d &_matrix) +{ + BaseCamera::SetProjectionMatrix(_matrix); + this->ogreCamera->setCustomProjectionMatrix(true, + Ogre2Conversions::Convert(this->projectionMatrix)); +} From f7fd6451429df3866baadcf698922232938b93fd Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Tue, 14 May 2024 18:13:40 +0000 Subject: [PATCH 5/7] Revert "test overriding SetProjectionMatrix function" This reverts commit 7fbcb1c385694cfdfeea2a4a5b765bda87d5f4b1. Signed-off-by: Ian Chen --- .../gz/rendering/ogre2/Ogre2DepthCamera.hh | 4 ---- ogre2/src/Ogre2DepthCamera.cc | 21 ++++++++++++------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/ogre2/include/gz/rendering/ogre2/Ogre2DepthCamera.hh b/ogre2/include/gz/rendering/ogre2/Ogre2DepthCamera.hh index 5646c1b20..9d2a4cfc1 100644 --- a/ogre2/include/gz/rendering/ogre2/Ogre2DepthCamera.hh +++ b/ogre2/include/gz/rendering/ogre2/Ogre2DepthCamera.hh @@ -133,10 +133,6 @@ namespace gz // Documentation inherited. public: virtual Ogre::Camera *OgreCamera() const override; - // Documentation inherited. - public: virtual void SetProjectionMatrix( - const math::Matrix4d &_matrix) override; - /// \brief Get a pointer to the render target. /// \return Pointer to the render target protected: virtual RenderTargetPtr RenderTarget() const override; diff --git a/ogre2/src/Ogre2DepthCamera.cc b/ogre2/src/Ogre2DepthCamera.cc index eeca92cfe..2fa1fd7ea 100644 --- a/ogre2/src/Ogre2DepthCamera.cc +++ b/ogre2/src/Ogre2DepthCamera.cc @@ -1057,6 +1057,19 @@ void Ogre2DepthCamera::PreRender() if (!this->dataPtr->ogreCompositorWorkspace) this->CreateWorkspaceInstance(); + // todo(iche03) Override BaseCamera::SetProjectionMatrix() function + // instead of checking and setting the custom projection matrix here + if (this->ogreCamera && + this->projectionMatrix != gz::math::Matrix4d::Zero) + { + if (this->projectionMatrix != + Ogre2Conversions::Convert(this->ogreCamera->getProjectionMatrix())) + { + this->ogreCamera->setCustomProjectionMatrix(true, + Ogre2Conversions::Convert(this->projectionMatrix)); + } + } + // Disable color target (set to clear pass) if there are no rgb point cloud // connections if (this->dataPtr->colorTargetDef) @@ -1371,11 +1384,3 @@ Ogre::Camera *Ogre2DepthCamera::OgreCamera() const { return this->ogreCamera; } - -////////////////////////////////////////////////// -void Ogre2DepthCamera::SetProjectionMatrix(const math::Matrix4d &_matrix) -{ - BaseCamera::SetProjectionMatrix(_matrix); - this->ogreCamera->setCustomProjectionMatrix(true, - Ogre2Conversions::Convert(this->projectionMatrix)); -} From 868cc4ab7560fc56fc3df75ce1322bcc859fe075 Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Tue, 14 May 2024 18:23:27 +0000 Subject: [PATCH 6/7] update comment to mention todo version Signed-off-by: Ian Chen --- ogre2/src/Ogre2BoundingBoxCamera.cc | 5 +++-- ogre2/src/Ogre2DepthCamera.cc | 5 +++-- ogre2/src/Ogre2SegmentationCamera.cc | 5 +++-- ogre2/src/Ogre2ThermalCamera.cc | 5 +++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/ogre2/src/Ogre2BoundingBoxCamera.cc b/ogre2/src/Ogre2BoundingBoxCamera.cc index 7f98cefb8..0adb97017 100644 --- a/ogre2/src/Ogre2BoundingBoxCamera.cc +++ b/ogre2/src/Ogre2BoundingBoxCamera.cc @@ -465,8 +465,9 @@ void Ogre2BoundingBoxCamera::PreRender() if (!this->dataPtr->ogreRenderTexture) this->CreateBoundingBoxTexture(); - // todo(iche03) Override BaseCamera::SetProjectionMatrix() function - // instead of checking and setting the custom projection matrix here + // todo(iche033) Override BaseCamera::SetProjectionMatrix() function in + // main / gz-rendering9 instead of checking and setting the custom + // projection matrix here if (this->dataPtr->ogreCamera && this->projectionMatrix != gz::math::Matrix4d::Zero) { diff --git a/ogre2/src/Ogre2DepthCamera.cc b/ogre2/src/Ogre2DepthCamera.cc index 2fa1fd7ea..db9ad5d99 100644 --- a/ogre2/src/Ogre2DepthCamera.cc +++ b/ogre2/src/Ogre2DepthCamera.cc @@ -1057,8 +1057,9 @@ void Ogre2DepthCamera::PreRender() if (!this->dataPtr->ogreCompositorWorkspace) this->CreateWorkspaceInstance(); - // todo(iche03) Override BaseCamera::SetProjectionMatrix() function - // instead of checking and setting the custom projection matrix here + // todo(iche033) Override BaseCamera::SetProjectionMatrix() function in + // main / gz-rendering9 instead of checking and setting the custom + // projection matrix here if (this->ogreCamera && this->projectionMatrix != gz::math::Matrix4d::Zero) { diff --git a/ogre2/src/Ogre2SegmentationCamera.cc b/ogre2/src/Ogre2SegmentationCamera.cc index df17b5a7c..4028daccc 100644 --- a/ogre2/src/Ogre2SegmentationCamera.cc +++ b/ogre2/src/Ogre2SegmentationCamera.cc @@ -166,8 +166,9 @@ void Ogre2SegmentationCamera::PreRender() if (!this->dataPtr->ogreSegmentationTexture) this->CreateSegmentationTexture(); - // todo(iche03) Override BaseCamera::SetProjectionMatrix() function - // instead of checking and setting the custom projection matrix here + // todo(iche033) Override BaseCamera::SetProjectionMatrix() function in + // main / gz-rendering9 instead of checking and setting the custom + // projection matrix here if (this->ogreCamera && this->projectionMatrix != gz::math::Matrix4d::Zero) { diff --git a/ogre2/src/Ogre2ThermalCamera.cc b/ogre2/src/Ogre2ThermalCamera.cc index 665f65e20..fa06f380f 100644 --- a/ogre2/src/Ogre2ThermalCamera.cc +++ b/ogre2/src/Ogre2ThermalCamera.cc @@ -1132,8 +1132,9 @@ void Ogre2ThermalCamera::PreRender() if (!this->dataPtr->ogreThermalTexture) this->CreateThermalTexture(); - // todo(iche03) Override BaseCamera::SetProjectionMatrix() function - // instead of checking and setting the custom projection matrix here + // todo(iche033) Override BaseCamera::SetProjectionMatrix() function in + // main / gz-rendering9 instead of checking and setting the custom + // projection matrix here if (this->ogreCamera && this->projectionMatrix != gz::math::Matrix4d::Zero) { From bd5895b31b1d3e3bcf6869e667d8df38eabaf131 Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Tue, 14 May 2024 18:56:04 +0000 Subject: [PATCH 7/7] add include Signed-off-by: Ian Chen --- test/integration/depth_camera.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/test/integration/depth_camera.cc b/test/integration/depth_camera.cc index 403a61b37..710bab0e9 100644 --- a/test/integration/depth_camera.cc +++ b/test/integration/depth_camera.cc @@ -16,6 +16,7 @@ */ #include +#include #include "CommonRenderingTest.hh"