diff --git a/modules/skybrowser/include/screenspaceskybrowser.h b/modules/skybrowser/include/screenspaceskybrowser.h index 4d26d9d3b9..a91216e8a6 100644 --- a/modules/skybrowser/include/screenspaceskybrowser.h +++ b/modules/skybrowser/include/screenspaceskybrowser.h @@ -61,7 +61,7 @@ public: void updateTextureResolution(); // Copies rendered - void addRenderCopy(); + void addRenderCopy(const glm::vec3& raePosition, int nCopies); void removeRenderCopy(); private: diff --git a/modules/skybrowser/skybrowsermodule_lua.inl b/modules/skybrowser/skybrowsermodule_lua.inl index 2064279aec..815e3e668a 100644 --- a/modules/skybrowser/skybrowsermodule_lua.inl +++ b/modules/skybrowser/skybrowsermodule_lua.inl @@ -591,14 +591,17 @@ namespace { /** * Takes an identifier to a sky browser and adds a rendered copy to it. * \param id Identifier +* \param raePosition Position in radius, azimuth, elevation coordinates +* \param nCopies Number of copies */ -[[codegen::luawrap]] void addRenderCopy(std::string id) { +[[codegen::luawrap]] void addRenderCopy(std::string id, + int nCopies = 1, glm::vec3 raePosition = glm::vec3(2.1f, 0.f, 0.f)) { // Get module SkyBrowserModule* module = global::moduleEngine->module(); TargetBrowserPair* pair = module->getPair(id); if (pair) { - pair->browser()->addRenderCopy(); + pair->browser()->addRenderCopy(raePosition, nCopies); } } /** diff --git a/modules/skybrowser/src/screenspaceskybrowser.cpp b/modules/skybrowser/src/screenspaceskybrowser.cpp index 99dadbd468..ad3d8e4996 100644 --- a/modules/skybrowser/src/screenspaceskybrowser.cpp +++ b/modules/skybrowser/src/screenspaceskybrowser.cpp @@ -178,18 +178,24 @@ void ScreenSpaceSkyBrowser::updateTextureResolution() { _objectSize = glm::ivec3(_texture->dimensions()); } -void ScreenSpaceSkyBrowser::addRenderCopy() { - openspace::properties::Property::PropertyInfo info = RenderCopyInfo; - info.identifier += _renderCopies.size(); - _renderCopies.push_back( - std::make_unique( - info, - glm::vec3(2.1f, 0.f, 0.f), - glm::vec3(0.f, -glm::pi(), -glm::half_pi()), - glm::vec3(10.f, glm::pi(), glm::half_pi()) - ) - ); - addProperty(_renderCopies.back().get()); +void ScreenSpaceSkyBrowser::addRenderCopy(const glm::vec3& raePosition, int nCopies) { + int start = _renderCopies.size(); + for (int i = 0; i < nCopies; i++) { + openspace::properties::Property::PropertyInfo info = RenderCopyInfo; + float azimuth = i * glm::two_pi() / nCopies; + glm::vec3 position = raePosition + glm::vec3(0.f, azimuth, 0.f); + std::string id = "Rendercopy" + std::to_string(start + i); + info.identifier = id.c_str(); + _renderCopies.push_back( + std::make_unique( + info, + position, + glm::vec3(0.f, -glm::pi(), -glm::half_pi()), + glm::vec3(10.f, glm::pi(), glm::half_pi()) + ) + ); + addProperty(_renderCopies.back().get()); + } } void ScreenSpaceSkyBrowser::removeRenderCopy() {