From e7200059b8f99f02dff46a4426c338b44372a16c Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Sun, 2 Jul 2023 23:56:48 +0200 Subject: [PATCH 01/12] Expose more light parameters --- doc/source/doxygen-docs/changelog.md | 5 +++++ libs/opengl/include/mrpt/opengl/TLightParameters.h | 7 +++++++ libs/opengl/include/mrpt/opengl/TRenderMatrices.h | 8 ++------ libs/opengl/src/TLightParameters.cpp | 6 +++--- libs/opengl/src/TRenderMatrices.cpp | 9 +++++---- libs/opengl/src/Viewport.cpp | 2 +- 6 files changed, 23 insertions(+), 14 deletions(-) diff --git a/doc/source/doxygen-docs/changelog.md b/doc/source/doxygen-docs/changelog.md index 3120a8807c..85318775c7 100644 --- a/doc/source/doxygen-docs/changelog.md +++ b/doc/source/doxygen-docs/changelog.md @@ -1,5 +1,10 @@ \page changelog Change Log +# Version 2.10.0: UNRELEASED +- Changes in libraries: + - \ref mrpt_opengl_grp + - Move the parameter eyeDistance2lightShadowExtension from TRenderMatrices to mrpt::opengl::TLightParameters so it can be changed from user code (ABI change). + # Version 2.9.4: Released July 1st, 2023 - Python: - pymrpt now ships stub `.pyi` files, for IDEs to autocomplete MRPT Python programs. diff --git a/libs/opengl/include/mrpt/opengl/TLightParameters.h b/libs/opengl/include/mrpt/opengl/TLightParameters.h index 51a0e06889..8d67973ac1 100644 --- a/libs/opengl/include/mrpt/opengl/TLightParameters.h +++ b/libs/opengl/include/mrpt/opengl/TLightParameters.h @@ -38,6 +38,13 @@ struct TLightParameters float shadow_bias = 1e-5, shadow_bias_cam2frag = 1e-5, shadow_bias_normal = 1e-4; + /** Multiplier from eye distance to the length size of the squared area in + * which to evaluate shadow casting by unidirectional light. + * Unitless (meter/meter). + * \note (New in MRPT 2.10.0) + */ + double eyeDistance2lightShadowExtension = 2.0; + void writeToStream(mrpt::serialization::CArchive& out) const; void readFromStream(mrpt::serialization::CArchive& in); diff --git a/libs/opengl/include/mrpt/opengl/TRenderMatrices.h b/libs/opengl/include/mrpt/opengl/TRenderMatrices.h index c2e47bfaaf..35c4d1c76a 100644 --- a/libs/opengl/include/mrpt/opengl/TRenderMatrices.h +++ b/libs/opengl/include/mrpt/opengl/TRenderMatrices.h @@ -12,6 +12,7 @@ #include #include #include +#include namespace mrpt::opengl { @@ -84,11 +85,6 @@ struct TRenderMatrices double azimuth = .0, elev = .0; double eyeDistance = 1.0f; - /** Multiplier from eye distance to the length size of the squared area in - * which to evaluate shadow casting by unidirectional light. - */ - double eyeDistance2lightShadowExtension = 1.5; - /** In pixels. This may be smaller than the total render window. */ uint32_t viewport_width = 640, viewport_height = 480; @@ -121,7 +117,7 @@ struct TRenderMatrices /** Updates light_pv */ void computeLightProjectionMatrix( - float zmin, float zmax, const mrpt::math::TVector3Df& direction); + float zmin, float zmax, const TLightParameters& lp); /** Especial case for custom parameters of Orthographic projection. * Equivalent to `p_matrix = ortho(...);`. diff --git a/libs/opengl/src/TLightParameters.cpp b/libs/opengl/src/TLightParameters.cpp index 03a73a6f49..b0448ff3e6 100644 --- a/libs/opengl/src/TLightParameters.cpp +++ b/libs/opengl/src/TLightParameters.cpp @@ -18,7 +18,7 @@ using namespace std; void TLightParameters::writeToStream(mrpt::serialization::CArchive& out) const { - const uint8_t version = 2; + const uint8_t version = 3; out << version; out << diffuse << ambient << specular << direction << color; @@ -44,11 +44,11 @@ void TLightParameters::readFromStream(mrpt::serialization::CArchive& in) break; case 1: case 2: + case 3: in >> diffuse >> ambient >> specular >> direction >> color; if (version >= 2) - { in >> shadow_bias >> shadow_bias_cam2frag >> shadow_bias_normal; - } + if (version >= 3) in >> eyeDistance2lightShadowExtension; break; default: MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(version); }; diff --git a/libs/opengl/src/TRenderMatrices.cpp b/libs/opengl/src/TRenderMatrices.cpp index 39e472535e..9ee8bfd717 100644 --- a/libs/opengl/src/TRenderMatrices.cpp +++ b/libs/opengl/src/TRenderMatrices.cpp @@ -12,6 +12,7 @@ #include #include // crossProduct3D() #include // dotProduct() +#include #include #include @@ -151,18 +152,18 @@ static void azimuthElevationFromDirection( } void TRenderMatrices::computeLightProjectionMatrix( - float zmin, float zmax, const mrpt::math::TVector3Df& direction) + float zmin, float zmax, const TLightParameters& lp) { m_last_light_z_near = zmin; m_last_light_z_far = zmax; - float dist = eyeDistance * eyeDistance2lightShadowExtension; + float dist = eyeDistance * lp.eyeDistance2lightShadowExtension; light_p = OrthoProjectionMatrix(-dist, dist, -dist, dist, zmin, zmax); // "up" vector from elevation: float azim = 0, elevation = 0; - azimuthElevationFromDirection(direction, elevation, azim); + azimuthElevationFromDirection(lp.direction, elevation, azim); const auto lightUp = mrpt::math::TVector3Df( -cos(azim) * sin(elevation), // x @@ -170,7 +171,7 @@ void TRenderMatrices::computeLightProjectionMatrix( cos(elevation) // z ); - light_v = LookAt(pointing - direction * zmax * 0.5, pointing, lightUp); + light_v = LookAt(pointing - lp.direction * zmax * 0.5, pointing, lightUp); light_pv.asEigen() = light_p.asEigen() * light_v.asEigen(); diff --git a/libs/opengl/src/Viewport.cpp b/libs/opengl/src/Viewport.cpp index aa3c05ee32..63a8172951 100644 --- a/libs/opengl/src/Viewport.cpp +++ b/libs/opengl/src/Viewport.cpp @@ -1302,7 +1302,7 @@ void Viewport::updateMatricesFromCamera(const CCamera& myCamera) const // Compute the directional light projection matrix (light_pv) _.computeLightProjectionMatrix( - m_lightShadowClipMin, m_lightShadowClipMax, m_light.direction); + m_lightShadowClipMin, m_lightShadowClipMax, m_light); _.initialized = true; } From 9f5a4915f93ca66940bb305bdcebf41b4dc93286 Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Mon, 3 Jul 2023 00:29:00 +0200 Subject: [PATCH 02/12] Update of wrappers after last commit --- python/generate-python-stubs.sh | 19 +++++++++++++++++++ python/generate-python.sh | 6 ++---- .../{patch-009.diff => patch-stubs-001.diff} | 0 python/src/mrpt/opengl/DefaultShaders.cpp | 6 +++--- .../mrpt/pymrpt/mrpt/opengl/__init__.pyi | 4 ++-- python/stubs-out/mrpt/pymrpt/std/chrono.pyi | 2 +- 6 files changed, 27 insertions(+), 10 deletions(-) create mode 100755 python/generate-python-stubs.sh rename python/{patch-009.diff => patch-stubs-001.diff} (100%) diff --git a/python/generate-python-stubs.sh b/python/generate-python-stubs.sh new file mode 100755 index 0000000000..07e4efd0b1 --- /dev/null +++ b/python/generate-python-stubs.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# Usage: ./generate-python-stubs.sh +# To be run *after* building pymrpt. + + +# Generate stub .pyi files: +echo "Generating stub pyi files..." +export PYTHONPATH=$(realpath $(pwd)/../build-Release/) +if compgen -G "$PYTHONPATH/mrpt/pymrpt*.so" > /dev/null; then + echo "Using mrpt module found under: $PYTHONPATH" +else + echo "$PYTHONPATH does not seem to contain a compiled pymrpt module!" + exit 1 +fi +stubgen -p mrpt -p mrpt.pymrpt -o stubs-out + +# applying manual patches to stubs: +echo "Applying manual patches to stubs..." +find . -name "patch-stubs*.diff" | xargs -I FIL bash -c "echo FIL && git apply FIL" diff --git a/python/generate-python.sh b/python/generate-python.sh index 2281664882..1759f09a22 100755 --- a/python/generate-python.sh +++ b/python/generate-python.sh @@ -93,8 +93,6 @@ find $WRAP_OUT_DIR -name "*.cpp" | xargs -I FIL \ sed -i -e 's/(long)/(int64_t)/g' FIL # applying manual patches: -echo "Applying manual patches..." -find . -name "*.diff" | xargs -I FIL bash -c "git apply FIL" +echo "Applying manual patches to pybind11 code..." +find . -name "patch-0*.diff" | xargs -I FIL bash -c "echo FIL && git apply FIL" -# Generate stub .pyi files: -stubgen -p mrpt -p mrpt.pymrpt -o stubs-out diff --git a/python/patch-009.diff b/python/patch-stubs-001.diff similarity index 100% rename from python/patch-009.diff rename to python/patch-stubs-001.diff diff --git a/python/src/mrpt/opengl/DefaultShaders.cpp b/python/src/mrpt/opengl/DefaultShaders.cpp index 29f71a4b6d..40e71d1c66 100644 --- a/python/src/mrpt/opengl/DefaultShaders.cpp +++ b/python/src/mrpt/opengl/DefaultShaders.cpp @@ -68,7 +68,7 @@ void bind_mrpt_opengl_DefaultShaders(std::function< pybind11::module &(std::stri pybind11::class_> cl(M("mrpt::opengl"), "DefaultShaderID", ""); cl.def( pybind11::init( [](){ return new mrpt::opengl::DefaultShaderID(); } ) ); } - { // mrpt::opengl::TRenderMatrices file:mrpt/opengl/TRenderMatrices.h line:28 + { // mrpt::opengl::TRenderMatrices file:mrpt/opengl/TRenderMatrices.h line:29 pybind11::class_> cl(M("mrpt::opengl"), "TRenderMatrices", "Rendering state related to the projection and model-view matrices.\n Used to store matrices that will be sent to shaders.\n\n The homogeneous coordinates of a rendered point comes from the product\n (from right to left) of MODEL, VIEW and PROJECTION matrices:\n\n p = p_matrix * v_matrix * m_matrix * [x y z 1.0]'\n\n \n\n "); cl.def( pybind11::init( [](){ return new mrpt::opengl::TRenderMatrices(); } ) ); cl.def( pybind11::init( [](mrpt::opengl::TRenderMatrices const &o){ return new mrpt::opengl::TRenderMatrices(o); } ) ); @@ -88,7 +88,6 @@ void bind_mrpt_opengl_DefaultShaders(std::function< pybind11::module &(std::stri cl.def_readwrite("azimuth", &mrpt::opengl::TRenderMatrices::azimuth); cl.def_readwrite("elev", &mrpt::opengl::TRenderMatrices::elev); cl.def_readwrite("eyeDistance", &mrpt::opengl::TRenderMatrices::eyeDistance); - cl.def_readwrite("eyeDistance2lightShadowExtension", &mrpt::opengl::TRenderMatrices::eyeDistance2lightShadowExtension); cl.def_readwrite("viewport_width", &mrpt::opengl::TRenderMatrices::viewport_width); cl.def_readwrite("viewport_height", &mrpt::opengl::TRenderMatrices::viewport_height); cl.def_readwrite("initialized", &mrpt::opengl::TRenderMatrices::initialized); @@ -98,7 +97,7 @@ void bind_mrpt_opengl_DefaultShaders(std::function< pybind11::module &(std::stri cl.def_readwrite("up", &mrpt::opengl::TRenderMatrices::up); cl.def("matricesSetIdentity", (void (mrpt::opengl::TRenderMatrices::*)()) &mrpt::opengl::TRenderMatrices::matricesSetIdentity, "C++: mrpt::opengl::TRenderMatrices::matricesSetIdentity() --> void"); cl.def("computeProjectionMatrix", (void (mrpt::opengl::TRenderMatrices::*)(float, float)) &mrpt::opengl::TRenderMatrices::computeProjectionMatrix, "Uses is_projective , vw,vh, etc. and computes p_matrix from either:\n - pinhole_model if set, or\n - FOV, otherwise.\n Replacement for obsolete: gluPerspective() and glOrtho() \n\nC++: mrpt::opengl::TRenderMatrices::computeProjectionMatrix(float, float) --> void", pybind11::arg("zmin"), pybind11::arg("zmax")); - cl.def("computeLightProjectionMatrix", (void (mrpt::opengl::TRenderMatrices::*)(float, float, const struct mrpt::math::TPoint3D_ &)) &mrpt::opengl::TRenderMatrices::computeLightProjectionMatrix, "Updates light_pv \n\nC++: mrpt::opengl::TRenderMatrices::computeLightProjectionMatrix(float, float, const struct mrpt::math::TPoint3D_ &) --> void", pybind11::arg("zmin"), pybind11::arg("zmax"), pybind11::arg("direction")); + cl.def("computeLightProjectionMatrix", (void (mrpt::opengl::TRenderMatrices::*)(float, float, const struct mrpt::opengl::TLightParameters &)) &mrpt::opengl::TRenderMatrices::computeLightProjectionMatrix, "Updates light_pv \n\nC++: mrpt::opengl::TRenderMatrices::computeLightProjectionMatrix(float, float, const struct mrpt::opengl::TLightParameters &) --> void", pybind11::arg("zmin"), pybind11::arg("zmax"), pybind11::arg("lp")); cl.def("computeOrthoProjectionMatrix", (void (mrpt::opengl::TRenderMatrices::*)(float, float, float, float, float, float)) &mrpt::opengl::TRenderMatrices::computeOrthoProjectionMatrix, "Especial case for custom parameters of Orthographic projection.\n Equivalent to `p_matrix = ortho(...);`.\n\n Replacement for obsolete: glOrtho()\n\nC++: mrpt::opengl::TRenderMatrices::computeOrthoProjectionMatrix(float, float, float, float, float, float) --> void", pybind11::arg("left"), pybind11::arg("right"), pybind11::arg("bottom"), pybind11::arg("top"), pybind11::arg("znear"), pybind11::arg("zfar")); cl.def_static("OrthoProjectionMatrix", (class mrpt::math::CMatrixFixed (*)(float, float, float, float, float, float)) &mrpt::opengl::TRenderMatrices::OrthoProjectionMatrix, "Computes and returns an orthographic projection matrix.\n Equivalent to obsolete glOrtho() or glm::ortho().\n\nC++: mrpt::opengl::TRenderMatrices::OrthoProjectionMatrix(float, float, float, float, float, float) --> class mrpt::math::CMatrixFixed", pybind11::arg("left"), pybind11::arg("right"), pybind11::arg("bottom"), pybind11::arg("top"), pybind11::arg("znear"), pybind11::arg("zfar")); cl.def("computeNoProjectionMatrix", (void (mrpt::opengl::TRenderMatrices::*)(float, float)) &mrpt::opengl::TRenderMatrices::computeNoProjectionMatrix, "Especial case: no projection, opengl coordinates are pixels from (0,0)\n bottom-left corner.\n\nC++: mrpt::opengl::TRenderMatrices::computeNoProjectionMatrix(float, float) --> void", pybind11::arg("znear"), pybind11::arg("zfar")); @@ -142,6 +141,7 @@ void bind_mrpt_opengl_DefaultShaders(std::function< pybind11::module &(std::stri cl.def_readwrite("shadow_bias", &mrpt::opengl::TLightParameters::shadow_bias); cl.def_readwrite("shadow_bias_cam2frag", &mrpt::opengl::TLightParameters::shadow_bias_cam2frag); cl.def_readwrite("shadow_bias_normal", &mrpt::opengl::TLightParameters::shadow_bias_normal); + cl.def_readwrite("eyeDistance2lightShadowExtension", &mrpt::opengl::TLightParameters::eyeDistance2lightShadowExtension); cl.def("writeToStream", (void (mrpt::opengl::TLightParameters::*)(class mrpt::serialization::CArchive &) const) &mrpt::opengl::TLightParameters::writeToStream, "C++: mrpt::opengl::TLightParameters::writeToStream(class mrpt::serialization::CArchive &) const --> void", pybind11::arg("out")); cl.def("readFromStream", (void (mrpt::opengl::TLightParameters::*)(class mrpt::serialization::CArchive &)) &mrpt::opengl::TLightParameters::readFromStream, "C++: mrpt::opengl::TLightParameters::readFromStream(class mrpt::serialization::CArchive &) --> void", pybind11::arg("in")); cl.def("assign", (struct mrpt::opengl::TLightParameters & (mrpt::opengl::TLightParameters::*)(const struct mrpt::opengl::TLightParameters &)) &mrpt::opengl::TLightParameters::operator=, "C++: mrpt::opengl::TLightParameters::operator=(const struct mrpt::opengl::TLightParameters &) --> struct mrpt::opengl::TLightParameters &", pybind11::return_value_policy::automatic, pybind11::arg("")); diff --git a/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi b/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi index 237845e70f..dbd2f10ab9 100644 --- a/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi +++ b/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi @@ -3605,6 +3605,7 @@ class TLightParameters: color: mrpt.pymrpt.mrpt.img.TColorf diffuse: float direction: Any + eyeDistance2lightShadowExtension: float shadow_bias: float shadow_bias_cam2frag: float shadow_bias_normal: float @@ -3660,7 +3661,6 @@ class TRenderMatrices: elev: float eye: Any eyeDistance: float - eyeDistance2lightShadowExtension: float initialized: bool is1stShadowMapPass: bool is_projective: bool @@ -3686,7 +3686,7 @@ class TRenderMatrices: def LookAt(self, *args, **kwargs) -> Any: ... def OrthoProjectionMatrix(self, *args, **kwargs) -> Any: ... def assign(self) -> TRenderMatrices: ... - def computeLightProjectionMatrix(self, zmin: float, zmax: float, direction) -> None: ... + def computeLightProjectionMatrix(self, zmin: float, zmax: float, lp) -> None: ... def computeNoProjectionMatrix(self, znear: float, zfar: float) -> None: ... def computeOrthoProjectionMatrix(self, *args, **kwargs) -> Any: ... def computeProjectionMatrix(self, *args, **kwargs) -> Any: ... diff --git a/python/stubs-out/mrpt/pymrpt/std/chrono.pyi b/python/stubs-out/mrpt/pymrpt/std/chrono.pyi index 6ab9717938..dbc88f81c0 100644 --- a/python/stubs-out/mrpt/pymrpt/std/chrono.pyi +++ b/python/stubs-out/mrpt/pymrpt/std/chrono.pyi @@ -37,6 +37,6 @@ class time_point_mrpt_Clock_std_chrono_duration_long_std_ratio_1_10000000_t: def max(self, *args, **kwargs) -> Any: ... def min(self, *args, **kwargs) -> Any: ... def time_since_epoch(self) -> duration_long_std_ratio_1_10000000_t: ... - def to_double()(self, *args, **kwargs) -> Any: ... + def to_double(self) -> float: ... def __iadd__(self, __dur: duration_long_std_ratio_1_10000000_t) -> time_point_mrpt_Clock_std_chrono_duration_long_std_ratio_1_10000000_t: ... def __isub__(self, __dur: duration_long_std_ratio_1_10000000_t) -> time_point_mrpt_Clock_std_chrono_duration_long_std_ratio_1_10000000_t: ... From d5735049c843754117a30b5ed952219d919d96fa Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Mon, 3 Jul 2023 00:30:08 +0200 Subject: [PATCH 03/12] Minor version bump (ABI change) --- appveyor.yml | 2 +- package.xml | 2 +- version_prefix.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index ceae073969..2b57ac3e36 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,5 @@ # version format -version: 2.9.4-{branch}-build{build} +version: 2.10.0-{branch}-build{build} os: Visual Studio 2019 diff --git a/package.xml b/package.xml index 5d9ff66e42..eef87c6d7a 100644 --- a/package.xml +++ b/package.xml @@ -7,7 +7,7 @@ mrpt2 - 2.9.4 + 2.10.0 Mobile Robot Programming Toolkit (MRPT) version 2.x Jose-Luis Blanco-Claraco diff --git a/version_prefix.txt b/version_prefix.txt index 2618ed19e6..2bda831cc9 100644 --- a/version_prefix.txt +++ b/version_prefix.txt @@ -1,4 +1,4 @@ -2.9.4 +2.10.0 # IMPORTANT: This file is parsed by CMake, don't add any comment to # the first line. # This file is used in both Windows and Linux scripts to automatically From 058fb7a04bb1d874d7cabb16f902b603779d79da Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Mon, 3 Jul 2023 00:35:01 +0200 Subject: [PATCH 04/12] FIX: missing pymrpt build dep to tests --- doc/source/doxygen-docs/changelog.md | 2 ++ tests/CMakeLists.txt | 1 + 2 files changed, 3 insertions(+) diff --git a/doc/source/doxygen-docs/changelog.md b/doc/source/doxygen-docs/changelog.md index 85318775c7..91ff91fc83 100644 --- a/doc/source/doxygen-docs/changelog.md +++ b/doc/source/doxygen-docs/changelog.md @@ -4,6 +4,8 @@ - Changes in libraries: - \ref mrpt_opengl_grp - Move the parameter eyeDistance2lightShadowExtension from TRenderMatrices to mrpt::opengl::TLightParameters so it can be changed from user code (ABI change). +- BUG FIXES: + - pymrpt was not automatically built when invoking the python tests using `make test_legacy`. # Version 2.9.4: Released July 1st, 2023 - Python: diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e473a7984a..c6f0f83162 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -199,6 +199,7 @@ function(mrpt_add_python_test NAME) message(STATUS "pytest cmd: ${cmd}") add_custom_target(run_test_python_${NAME} COMMAND ${cmd}) add_dependencies(test_legacy run_test_python_${NAME}) + add_dependencies(run_test_python_${NAME} pymrpt) endfunction() if (CMAKE_MRPT_HAS_PYTHON_BINDINGS) From 01787e49699fe38e8a85cfe8c700df1ed4df2ed4 Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Mon, 3 Jul 2023 00:36:26 +0200 Subject: [PATCH 05/12] FIX: missing serialized parameter --- libs/opengl/src/TLightParameters.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/opengl/src/TLightParameters.cpp b/libs/opengl/src/TLightParameters.cpp index b0448ff3e6..85e96da20c 100644 --- a/libs/opengl/src/TLightParameters.cpp +++ b/libs/opengl/src/TLightParameters.cpp @@ -23,6 +23,7 @@ void TLightParameters::writeToStream(mrpt::serialization::CArchive& out) const out << diffuse << ambient << specular << direction << color; out << shadow_bias << shadow_bias_cam2frag << shadow_bias_normal; // v2 + out << eyeDistance2lightShadowExtension; // v3 } void TLightParameters::readFromStream(mrpt::serialization::CArchive& in) From 2278da0383922035d32005c22b72ed2484bfc275 Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Mon, 3 Jul 2023 01:22:26 +0200 Subject: [PATCH 06/12] New shadow tuning parameter --- doc/source/doxygen-docs/changelog.md | 1 + libs/opengl/include/mrpt/opengl/TLightParameters.h | 9 +++++++++ libs/opengl/src/TLightParameters.cpp | 7 +++++-- libs/opengl/src/TRenderMatrices.cpp | 4 ++++ python/src/mrpt/opengl/DefaultShaders.cpp | 1 + python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi | 1 + 6 files changed, 21 insertions(+), 2 deletions(-) diff --git a/doc/source/doxygen-docs/changelog.md b/doc/source/doxygen-docs/changelog.md index 91ff91fc83..8d8f0e73a8 100644 --- a/doc/source/doxygen-docs/changelog.md +++ b/doc/source/doxygen-docs/changelog.md @@ -4,6 +4,7 @@ - Changes in libraries: - \ref mrpt_opengl_grp - Move the parameter eyeDistance2lightShadowExtension from TRenderMatrices to mrpt::opengl::TLightParameters so it can be changed from user code (ABI change). + - New parameter mrpt::opengl::TLightParameters::minimum_shadow_map_extension_ratio - BUG FIXES: - pymrpt was not automatically built when invoking the python tests using `make test_legacy`. diff --git a/libs/opengl/include/mrpt/opengl/TLightParameters.h b/libs/opengl/include/mrpt/opengl/TLightParameters.h index 8d67973ac1..b2cb170bba 100644 --- a/libs/opengl/include/mrpt/opengl/TLightParameters.h +++ b/libs/opengl/include/mrpt/opengl/TLightParameters.h @@ -45,6 +45,15 @@ struct TLightParameters */ double eyeDistance2lightShadowExtension = 2.0; + /** Minimum extension (in [0,1] ratio of the light distance) of the shadow + * map square ortho frustum. Should be roughly the maximum area of the + * largest room for indoor environments to ensure no missing shadows in + * distant areas. + * + * \note (New in MRPT 2.10.0) + */ + float minimum_shadow_map_extension_ratio = 0.03f; + void writeToStream(mrpt::serialization::CArchive& out) const; void readFromStream(mrpt::serialization::CArchive& in); diff --git a/libs/opengl/src/TLightParameters.cpp b/libs/opengl/src/TLightParameters.cpp index 85e96da20c..6dd23459b4 100644 --- a/libs/opengl/src/TLightParameters.cpp +++ b/libs/opengl/src/TLightParameters.cpp @@ -23,7 +23,8 @@ void TLightParameters::writeToStream(mrpt::serialization::CArchive& out) const out << diffuse << ambient << specular << direction << color; out << shadow_bias << shadow_bias_cam2frag << shadow_bias_normal; // v2 - out << eyeDistance2lightShadowExtension; // v3 + out << eyeDistance2lightShadowExtension + << minimum_shadow_map_extension_ratio; // v3 } void TLightParameters::readFromStream(mrpt::serialization::CArchive& in) @@ -49,7 +50,9 @@ void TLightParameters::readFromStream(mrpt::serialization::CArchive& in) in >> diffuse >> ambient >> specular >> direction >> color; if (version >= 2) in >> shadow_bias >> shadow_bias_cam2frag >> shadow_bias_normal; - if (version >= 3) in >> eyeDistance2lightShadowExtension; + if (version >= 3) + in >> eyeDistance2lightShadowExtension >> + minimum_shadow_map_extension_ratio; break; default: MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(version); }; diff --git a/libs/opengl/src/TRenderMatrices.cpp b/libs/opengl/src/TRenderMatrices.cpp index 9ee8bfd717..a17a10d669 100644 --- a/libs/opengl/src/TRenderMatrices.cpp +++ b/libs/opengl/src/TRenderMatrices.cpp @@ -158,6 +158,10 @@ void TRenderMatrices::computeLightProjectionMatrix( m_last_light_z_far = zmax; float dist = eyeDistance * lp.eyeDistance2lightShadowExtension; + + // Ensure dist is not too small: + mrpt::keep_max(dist, zmax * lp.minimum_shadow_map_extension_ratio); + light_p = OrthoProjectionMatrix(-dist, dist, -dist, dist, zmin, zmax); // "up" vector from elevation: diff --git a/python/src/mrpt/opengl/DefaultShaders.cpp b/python/src/mrpt/opengl/DefaultShaders.cpp index 40e71d1c66..df85da7cff 100644 --- a/python/src/mrpt/opengl/DefaultShaders.cpp +++ b/python/src/mrpt/opengl/DefaultShaders.cpp @@ -142,6 +142,7 @@ void bind_mrpt_opengl_DefaultShaders(std::function< pybind11::module &(std::stri cl.def_readwrite("shadow_bias_cam2frag", &mrpt::opengl::TLightParameters::shadow_bias_cam2frag); cl.def_readwrite("shadow_bias_normal", &mrpt::opengl::TLightParameters::shadow_bias_normal); cl.def_readwrite("eyeDistance2lightShadowExtension", &mrpt::opengl::TLightParameters::eyeDistance2lightShadowExtension); + cl.def_readwrite("minimum_shadow_map_extension_ratio", &mrpt::opengl::TLightParameters::minimum_shadow_map_extension_ratio); cl.def("writeToStream", (void (mrpt::opengl::TLightParameters::*)(class mrpt::serialization::CArchive &) const) &mrpt::opengl::TLightParameters::writeToStream, "C++: mrpt::opengl::TLightParameters::writeToStream(class mrpt::serialization::CArchive &) const --> void", pybind11::arg("out")); cl.def("readFromStream", (void (mrpt::opengl::TLightParameters::*)(class mrpt::serialization::CArchive &)) &mrpt::opengl::TLightParameters::readFromStream, "C++: mrpt::opengl::TLightParameters::readFromStream(class mrpt::serialization::CArchive &) --> void", pybind11::arg("in")); cl.def("assign", (struct mrpt::opengl::TLightParameters & (mrpt::opengl::TLightParameters::*)(const struct mrpt::opengl::TLightParameters &)) &mrpt::opengl::TLightParameters::operator=, "C++: mrpt::opengl::TLightParameters::operator=(const struct mrpt::opengl::TLightParameters &) --> struct mrpt::opengl::TLightParameters &", pybind11::return_value_policy::automatic, pybind11::arg("")); diff --git a/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi b/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi index dbd2f10ab9..8abd014c74 100644 --- a/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi +++ b/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi @@ -3606,6 +3606,7 @@ class TLightParameters: diffuse: float direction: Any eyeDistance2lightShadowExtension: float + minimum_shadow_map_extension_ratio: float shadow_bias: float shadow_bias_cam2frag: float shadow_bias_normal: float From 971c59a712213556541106041ca1cd1e981c5c5c Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Mon, 3 Jul 2023 01:25:41 +0200 Subject: [PATCH 07/12] silent msvc warning --- libs/core/include/mrpt/core/common.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libs/core/include/mrpt/core/common.h b/libs/core/include/mrpt/core/common.h index 337f79c842..f6b3099bfd 100644 --- a/libs/core/include/mrpt/core/common.h +++ b/libs/core/include/mrpt/core/common.h @@ -27,6 +27,8 @@ #pragma warning(disable : 4275) // DLL export class derived from STL // Warnings are emited even if a DLL export class contains a *private* STL field #pragma warning(disable : 4251) +// warning C4305: 'initializing': truncation from 'double' to 'float' +#pragma warning(disable : 4305) #if (_MSC_VER >= 1400) // MS believes they have the right to deprecate functions in the C++ Standard From a4ac136a457ccf542cfd17b0fb020af6a1a0b1e6 Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Mon, 3 Jul 2023 01:57:38 +0200 Subject: [PATCH 08/12] Fix appveyor builds --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 2b57ac3e36..1755b34cb2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -41,8 +41,8 @@ install: - tree c:\tools\opencv\build /F - set OPENCVDIR=C:\tools\opencv\build\ # This variable is parsed by MRPT/cmakemodules/script_opencv.cmake: - - set OPENCV_DLLS_TO_INSTALL_DIRS=%OPENCVDIR%bin;%OPENCVDIR%x64\vc15\bin - - set PATH=%PATH%;%OPENCVDIR%\bin;%OPENCVDIR%\x64\vc15\bin + - set OPENCV_DLLS_TO_INSTALL_DIRS=%OPENCVDIR%bin;%OPENCVDIR%x64\vc16\bin + - set PATH=%PATH%;%OPENCVDIR%\bin;%OPENCVDIR%\x64\vc16\bin # ====== Install wxWidgets - cd c:\ - ps: Start-FileDownload 'https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.3/wxMSW-3.1.3_vc14x_x64_Dev.7z' From 45821878dc1a8d91428391a3d3b567444f0d00c5 Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Mon, 3 Jul 2023 02:31:11 +0200 Subject: [PATCH 09/12] Simpler python import command; new opengl python demo --- python-examples/global_localization.py | 4 +- python-examples/hwdriver-tao-imu-usb.py | 3 +- python-examples/lines-3d-geometry-example.py | 3 +- python-examples/matrices.py | 3 +- python-examples/opengl-demo-gui.py | 52 +++++++++++++++++++ python-examples/rbpf_slam.py | 4 +- python-examples/ros-poses-convert.py | 4 +- python-examples/se3-poses-example.py | 3 +- python/patch-stubs-002.diff | 24 +++++++++ .../mrpt/pymrpt/mrpt/opengl/__init__.pyi | 2 + .../mrpt/pymrpt/mrpt/poses/__init__.pyi | 2 + 11 files changed, 88 insertions(+), 16 deletions(-) create mode 100755 python-examples/opengl-demo-gui.py create mode 100644 python/patch-stubs-002.diff diff --git a/python-examples/global_localization.py b/python-examples/global_localization.py index 2710b56a3d..8bd748b569 100755 --- a/python-examples/global_localization.py +++ b/python-examples/global_localization.py @@ -10,14 +10,12 @@ # # ./global_localization.py ../share/mrpt/config_files/pf-localization/localization_demo.ini # -from mrpt import pymrpt +from mrpt.pymrpt import mrpt import os import sys import argparse from time import sleep -mrpt = pymrpt.mrpt # namespace shortcut - # args parser = argparse.ArgumentParser() diff --git a/python-examples/hwdriver-tao-imu-usb.py b/python-examples/hwdriver-tao-imu-usb.py index 09ec6b3c6d..83aca5cd25 100755 --- a/python-examples/hwdriver-tao-imu-usb.py +++ b/python-examples/hwdriver-tao-imu-usb.py @@ -5,8 +5,7 @@ # export PYTHONPATH=$HOME/code/mrpt/build-Release/:$PYTHONPATH # --------------------------------------------------------------------- -from mrpt import pymrpt -mrpt = pymrpt.mrpt # namespace shortcut +from mrpt.pymrpt import mrpt imu = mrpt.hwdrivers.CTaoboticsIMU() diff --git a/python-examples/lines-3d-geometry-example.py b/python-examples/lines-3d-geometry-example.py index d9574c2c5a..2a238a048a 100755 --- a/python-examples/lines-3d-geometry-example.py +++ b/python-examples/lines-3d-geometry-example.py @@ -5,8 +5,7 @@ # export PYTHONPATH=$HOME/code/mrpt/build-Release/:$PYTHONPATH # --------------------------------------------------------------------- -from mrpt import pymrpt -mrpt = pymrpt.mrpt +from mrpt.pymrpt import mrpt # Aliases: TPoint3D = mrpt.math.TPoint3D_double_t diff --git a/python-examples/matrices.py b/python-examples/matrices.py index fae5280046..c2f3a46ef7 100755 --- a/python-examples/matrices.py +++ b/python-examples/matrices.py @@ -8,9 +8,8 @@ # More matrix classes available in the module mrpt.math. # See: https://mrpt.github.io/pymrpt-docs/mrpt.pymrpt.mrpt.math.html -from mrpt import pymrpt +from mrpt.pymrpt import mrpt import numpy as np -mrpt = pymrpt.mrpt # Create a numpy matrix from a list: m1_np = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) diff --git a/python-examples/opengl-demo-gui.py b/python-examples/opengl-demo-gui.py new file mode 100755 index 0000000000..5dd6bd9e02 --- /dev/null +++ b/python-examples/opengl-demo-gui.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 + +# --------------------------------------------------------------------- +# Install python3-pymrpt, ros-$ROS_DISTRO-mrpt2, or test with a local build with: +# export PYTHONPATH=$HOME/code/mrpt/build-Release/:$PYTHONPATH +# --------------------------------------------------------------------- + +from mrpt.pymrpt import mrpt +import time + +# Create GUI: +win = mrpt.gui.CDisplayWindow3D('MRPT GUI demo', 800, 600) + +# Get and lock 3D scene: +# Lock is required again each time the scene is modified, to prevent +# data race between the main and the rendering threads. +scene = win.get3DSceneAndLock() + +# ctor args: xMin: float, xMax: float, yMin: float, yMax: float, z: float, frequency: float +glGrid = mrpt.opengl.CGridPlaneXY.Create(-10, 10, -10, 10, 0, 1) +scene.insert(glGrid) + +glCorner = mrpt.opengl.stock_objects.CornerXYZ(2.0) +scene.insert(glCorner) + +glCorner2: mrpt.opengl.CSetOfObjects = mrpt.opengl.stock_objects.CornerXYZ(1.0) +glCorner2.setLocation(4.0, 0.0, 0.0) +scene.insert(glCorner2) + +glEllip = mrpt.opengl.CEllipsoidInverseDepth3D() +cov = mrpt.math.CMatrixFixed_double_3UL_3UL_t.Zero() +cov[0, 0] = 0.01 +cov[1, 1] = 0.001 +cov[2, 2] = 0.002 +mean = mrpt.math.CMatrixFixed_double_3UL_1UL_t() +mean[0, 0] = 0.2 # inv_range +mean[1, 0] = 0.5 # yaw +mean[2, 0] = -0.6 # pitch +glEllip.setCovMatrixAndMean(cov, mean) +scene.insert(glEllip) + + +# end of scene lock: +win.unlockAccess3DScene() + + +print('Close the window to quit the program') + +while win.isOpen(): + + win.repaint() + time.sleep(50e-3) diff --git a/python-examples/rbpf_slam.py b/python-examples/rbpf_slam.py index 8ba4fa32ba..2cc5bb0199 100755 --- a/python-examples/rbpf_slam.py +++ b/python-examples/rbpf_slam.py @@ -14,11 +14,9 @@ # ./rbpf_slam.py -c ../share/mrpt/config_files/rbpf-slam/gridmapping_optimal_sampling.ini ../share/mrpt/datasets/2006-01ENE-21-SENA_Telecom\ Faculty_one_loop_only.rawlog # -from mrpt import pymrpt +from mrpt.pymrpt import mrpt import argparse -mrpt = pymrpt.mrpt - # args parser = argparse.ArgumentParser() parser.add_argument('rawlog', help='Rawlog file.') diff --git a/python-examples/ros-poses-convert.py b/python-examples/ros-poses-convert.py index dec526e5a3..1ecbd7a237 100755 --- a/python-examples/ros-poses-convert.py +++ b/python-examples/ros-poses-convert.py @@ -8,11 +8,11 @@ # This example shows how to convert back and forth between MRPT poses # and ROS 1 or ROS 2 (both are compatible with this same code) Pose -from mrpt import pymrpt, ros_bridge +from mrpt.pymrpt import mrpt +from mrpt import ros_bridge from math import radians from geometry_msgs.msg import Pose, PoseWithCovariance -mrpt = pymrpt.mrpt # Example 1: 2D pose # -------------------------- diff --git a/python-examples/se3-poses-example.py b/python-examples/se3-poses-example.py index e8b670d502..6ba2b4dffa 100755 --- a/python-examples/se3-poses-example.py +++ b/python-examples/se3-poses-example.py @@ -5,9 +5,8 @@ # export PYTHONPATH=$HOME/code/mrpt/build-Release/:$PYTHONPATH # --------------------------------------------------------------------- +from mrpt.pymrpt import mrpt from math import radians -from mrpt import pymrpt -mrpt = pymrpt.mrpt p1 = mrpt.poses.CPose3D.FromXYZYawPitchRoll( 1.0, 2.0, 0, radians(90), radians(0), radians(0)) diff --git a/python/patch-stubs-002.diff b/python/patch-stubs-002.diff new file mode 100644 index 0000000000..ce284b7fa6 --- /dev/null +++ b/python/patch-stubs-002.diff @@ -0,0 +1,24 @@ +diff --git a/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi b/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi +index 8abd014c7..d29cf054a 100644 +--- a/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi ++++ b/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi +@@ -1,5 +1,7 @@ + from typing import Any, ClassVar, Dict, List, Optional, Tuple + ++from . import stock_objects ++ + from typing import overload + import mrpt.pymrpt.mrpt.containers + import mrpt.pymrpt.mrpt.img +diff --git a/python/stubs-out/mrpt/pymrpt/mrpt/poses/__init__.pyi b/python/stubs-out/mrpt/pymrpt/mrpt/poses/__init__.pyi +index 09ba314ee..6d716eb80 100644 +--- a/python/stubs-out/mrpt/pymrpt/mrpt/poses/__init__.pyi ++++ b/python/stubs-out/mrpt/pymrpt/mrpt/poses/__init__.pyi +@@ -1,5 +1,7 @@ + from typing import Any, ClassVar, Dict, Tuple + ++from . import Lie ++ + from typing import overload + import mrpt.pymrpt.mrpt + import mrpt.pymrpt.mrpt.bayes diff --git a/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi b/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi index 8abd014c74..d29cf054a1 100644 --- a/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi +++ b/python/stubs-out/mrpt/pymrpt/mrpt/opengl/__init__.pyi @@ -1,5 +1,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Tuple +from . import stock_objects + from typing import overload import mrpt.pymrpt.mrpt.containers import mrpt.pymrpt.mrpt.img diff --git a/python/stubs-out/mrpt/pymrpt/mrpt/poses/__init__.pyi b/python/stubs-out/mrpt/pymrpt/mrpt/poses/__init__.pyi index 09ba314ee5..6d716eb800 100644 --- a/python/stubs-out/mrpt/pymrpt/mrpt/poses/__init__.pyi +++ b/python/stubs-out/mrpt/pymrpt/mrpt/poses/__init__.pyi @@ -1,5 +1,7 @@ from typing import Any, ClassVar, Dict, Tuple +from . import Lie + from typing import overload import mrpt.pymrpt.mrpt import mrpt.pymrpt.mrpt.bayes From b095eafb460ab4ee36fd0e7d6e067150b1c20f37 Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Mon, 3 Jul 2023 12:37:14 +0200 Subject: [PATCH 10/12] Update opengl python example --- doc/source/pymrpt_example_opengl-demo-gui.rst | 18 +++++++++++ doc/source/python_examples.rst | 1 + python-examples/opengl-demo-gui.py | 32 ++++++++++++++++++- 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 doc/source/pymrpt_example_opengl-demo-gui.rst diff --git a/doc/source/pymrpt_example_opengl-demo-gui.rst b/doc/source/pymrpt_example_opengl-demo-gui.rst new file mode 100644 index 0000000000..fcbbb61330 --- /dev/null +++ b/doc/source/pymrpt_example_opengl-demo-gui.rst @@ -0,0 +1,18 @@ +.. _pyexample_opengl-demo-gui: + +==================================================== +Python example: opengl-demo-gui.py +==================================================== + +This example illustrates how to create a 3D GUI in MRPT using the Python API +and populate it with different objects, including animating them across the scene. + +.. raw:: html + + + + +.. literalinclude:: ../../python-examples/opengl-demo-gui.py + :language: python + :linenos: diff --git a/doc/source/python_examples.rst b/doc/source/python_examples.rst index ee30742cc1..6e5907616d 100644 --- a/doc/source/python_examples.rst +++ b/doc/source/python_examples.rst @@ -19,6 +19,7 @@ C++ examples are `here `_. pymrpt_example_hwdriver_tao_imu_usb.rst pymrpt_example_lines-3d-geometry-example.rst pymrpt_example_matrices.rst + pymrpt_example_opengl-demo-gui.rst pymrpt_example_rbpf_slam.rst pymrpt_example_ros-poses-convert.rst pymrpt_example_se2-poses-example.rst diff --git a/python-examples/opengl-demo-gui.py b/python-examples/opengl-demo-gui.py index 5dd6bd9e02..6ede53d398 100755 --- a/python-examples/opengl-demo-gui.py +++ b/python-examples/opengl-demo-gui.py @@ -7,6 +7,7 @@ from mrpt.pymrpt import mrpt import time +import math # Create GUI: win = mrpt.gui.CDisplayWindow3D('MRPT GUI demo', 800, 600) @@ -16,10 +17,12 @@ # data race between the main and the rendering threads. scene = win.get3DSceneAndLock() +# A grid on the XY horizontal plane: # ctor args: xMin: float, xMax: float, yMin: float, yMax: float, z: float, frequency: float -glGrid = mrpt.opengl.CGridPlaneXY.Create(-10, 10, -10, 10, 0, 1) +glGrid = mrpt.opengl.CGridPlaneXY.Create(-3, 3, -3, 3, 0, 1) scene.insert(glGrid) +# A couple of XYZ "corners": glCorner = mrpt.opengl.stock_objects.CornerXYZ(2.0) scene.insert(glCorner) @@ -27,6 +30,7 @@ glCorner2.setLocation(4.0, 0.0, 0.0) scene.insert(glCorner2) +# A 3D inverse-depth ellipsoid: glEllip = mrpt.opengl.CEllipsoidInverseDepth3D() cov = mrpt.math.CMatrixFixed_double_3UL_3UL_t.Zero() cov[0, 0] = 0.01 @@ -39,14 +43,40 @@ glEllip.setCovMatrixAndMean(cov, mean) scene.insert(glEllip) +# A floor "block": +glFloor = mrpt.opengl.CBox() +glFloor.setBoxCorners(mrpt.math.TPoint3D_double_t(-15, -15, 0), + mrpt.math.TPoint3D_double_t(15, 15, 0.1)) +glFloor.setLocation(0, 0, -3.0) +glFloor.setColor_u8(mrpt.img.TColor(0x70, 0x70, 0x70)) +scene.insert(glFloor) + +# A mobile box to illustrate animations: +glBox = mrpt.opengl.CBox() +glBox.setBoxCorners(mrpt.math.TPoint3D_double_t(0, 0, 0), + mrpt.math.TPoint3D_double_t(1, 1, 1)) +glBox.setBoxBorderColor(mrpt.img.TColor(0, 0, 0)) +glBox.castShadows(True) +scene.insert(glBox) + +# Shadows are disabled by default, enable them: +scene.getViewport().enableShadowCasting(True) +print('Shadow casting: ' + str(scene.getViewport().isShadowCastingEnabled())) + +# Move camera: +win.setCameraAzimuthDeg(-40.0) +win.setCameraElevationDeg(30.0) # end of scene lock: win.unlockAccess3DScene() print('Close the window to quit the program') +timer = mrpt.system.CTicTac() while win.isOpen(): + y = 5.0*math.sin(1.0*timer.Tac()) + glBox.setLocation(4.0, y, 0.0) win.repaint() time.sleep(50e-3) From c8d5907179a56ea03ba9daaa5bdd889a0eac1f0c Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Thu, 6 Jul 2023 00:14:32 +0200 Subject: [PATCH 11/12] fix wrong video in docs --- doc/source/pymrpt_example_opengl-demo-gui.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/source/pymrpt_example_opengl-demo-gui.rst b/doc/source/pymrpt_example_opengl-demo-gui.rst index fcbbb61330..25e30a2c76 100644 --- a/doc/source/pymrpt_example_opengl-demo-gui.rst +++ b/doc/source/pymrpt_example_opengl-demo-gui.rst @@ -9,8 +9,7 @@ and populate it with different objects, including animating them across the scen .. raw:: html - + .. literalinclude:: ../../python-examples/opengl-demo-gui.py From d7ada4c396f68d4bda6ce14934d7e319bbfebcea Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Sun, 9 Jul 2023 00:18:10 +0200 Subject: [PATCH 12/12] changelog --- doc/source/doxygen-docs/changelog.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/source/doxygen-docs/changelog.md b/doc/source/doxygen-docs/changelog.md index 8d8f0e73a8..10634eaed5 100644 --- a/doc/source/doxygen-docs/changelog.md +++ b/doc/source/doxygen-docs/changelog.md @@ -1,10 +1,12 @@ \page changelog Change Log -# Version 2.10.0: UNRELEASED +# Version 2.10.0: Released July 9th, 2023 - Changes in libraries: - \ref mrpt_opengl_grp - Move the parameter eyeDistance2lightShadowExtension from TRenderMatrices to mrpt::opengl::TLightParameters so it can be changed from user code (ABI change). - New parameter mrpt::opengl::TLightParameters::minimum_shadow_map_extension_ratio +- Python: + - More pymrpt examples. - BUG FIXES: - pymrpt was not automatically built when invoking the python tests using `make test_legacy`.