{"id":18008966,"url":"https://github.com/koide3/iridescence","last_synced_at":"2025-05-16T01:05:00.370Z","repository":{"id":37728055,"uuid":"287576561","full_name":"koide3/iridescence","owner":"koide3","description":"3D visualization library for rapid prototyping of 3D algorithms","archived":false,"fork":false,"pushed_at":"2025-04-23T04:06:16.000Z","size":2801,"stargazers_count":380,"open_issues_count":16,"forks_count":42,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-23T05:19:39.204Z","etag":null,"topics":["imgui","localization","mapping","opengl","point-cloud","slam","visualization"],"latest_commit_sha":null,"homepage":"https://koide3.github.io/iridescence/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/koide3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-08-14T16:24:07.000Z","updated_at":"2025-04-23T04:06:20.000Z","dependencies_parsed_at":"2023-02-15T15:01:06.638Z","dependency_job_id":"1425fee4-7bfc-44c2-83af-3c36d78f43b8","html_url":"https://github.com/koide3/iridescence","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Firidescence","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Firidescence/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Firidescence/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Firidescence/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/koide3","download_url":"https://codeload.github.com/koide3/iridescence/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254448579,"owners_count":22072764,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["imgui","localization","mapping","opengl","point-cloud","slam","visualization"],"created_at":"2024-10-30T02:08:20.424Z","updated_at":"2025-05-16T01:05:00.360Z","avatar_url":"https://github.com/koide3.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"![Iridescence](docs/assets/logo.png)\n\n**Iridescence** is a light-weight visualization library for rapid prototyping of 3D algorithms. This library is designed for accelerating personal research and development projects (mainly focusing on point-cloud-related algorithms) and is NOT intended to be a general-purpose visualization library with rich rendering capabilities.\n\n[![Build](https://github.com/koide3/iridescence/actions/workflows/build.yml/badge.svg)](https://github.com/koide3/iridescence/actions/workflows/build.yml) on Ubuntu 20.04 / 22.04 / 24.04\n\n## Features\n\nWhat this library provides:\n- An easy-to-use 3D visualization framework (inpaticular suitable for rendering point clouds)\n- Tightly integrated Dear ImGui interfaces for rapid UI design\n\nWhat this library does NOT provide:\n- Realistic rendering and shading\n- Rich textured 3D mesh rendering\n\nSee **[documentation](https://koide3.github.io/iridescence/)** for details.\n\n## Dependencies\n\n- [GLFW](https://www.glfw.org/) ([zlib/libpng license](https://www.glfw.org/license.html))\n- [gl3w](https://github.com/skaslev/gl3w) ([Public domain](https://github.com/skaslev/gl3w/blob/master/UNLICENSE))\n- [Dear ImGui](https://github.com/ocornut/imgui) ([MIT license](https://github.com/ocornut/imgui/blob/master/LICENSE.txt))\n- [ImGuizmo](https://github.com/CedricGuillemet/ImGuizmo) ([MIT license](https://github.com/CedricGuillemet/ImGuizmo/blob/master/LICENSE))\n- [implot](https://github.com/epezent/implot) ([MIT license](https://github.com/epezent/implot/blob/master/LICENSE))\n- [Eigen](https://eigen.tuxfamily.org/index.php) ([MPL2 license](https://www.mozilla.org/en-US/MPL/2.0/))\n- [portable-file-dialogs](https://github.com/samhocevar/portable-file-dialogs) ([WTFPL license](https://github.com/samhocevar/portable-file-dialogs/blob/main/COPYING))\n\n## Installation\n\n### Install from source\n\n```bash\n# Install dependencies\nsudo apt-get install -y libglm-dev libglfw3-dev libpng-dev libjpeg-dev libeigen3-dev\n\n# Build and install Iridescence\ngit clone https://github.com/koide3/iridescence --recursive\nmkdir iridescence/build \u0026\u0026 cd iridescence/build\ncmake ..\nmake -j\nsudo make install\n\n# [Optional] Build and install python bindings\ncd ..\npip install .\n\n# [Optional2] Install stubs for autocomplete\npip install pybind11-stubgen\n\ncd ~/.local/lib/python3.12/site-packages\n# If you are using a virtual environment, you can find the path with:\n# cd $(dirname $(which python))/../lib/python3.12/site-packages\n\npybind11-stubgen -o . pyridescence\n```\n\n### Install from [PPA](https://github.com/koide3/ppa) [AMD64, ARM64]\n\n#### Ubuntu 24.04\n\n```bash\ncurl -s --compressed \"https://koide3.github.io/ppa/ubuntu2404/KEY.gpg\" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/koide3_ppa.gpg \u003e/dev/null\necho \"deb [signed-by=/etc/apt/trusted.gpg.d/koide3_ppa.gpg] https://koide3.github.io/ppa/ubuntu2404 ./\" | sudo tee /etc/apt/sources.list.d/koide3_ppa.list\n\nsudo apt update \u0026\u0026 sudo apt install -y libiridescence-dev\n```\n\n#### Ubuntu 22.04\n\n```bash\ncurl -s --compressed \"https://koide3.github.io/ppa/ubuntu2204/KEY.gpg\" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/koide3_ppa.gpg \u003e/dev/null\necho \"deb [signed-by=/etc/apt/trusted.gpg.d/koide3_ppa.gpg] https://koide3.github.io/ppa/ubuntu2204 ./\" | sudo tee /etc/apt/sources.list.d/koide3_ppa.list\n\nsudo apt update \u0026\u0026 sudo apt install -y libiridescence-dev\n```\n\n#### Ubuntu 20.04\n\n```bash\ncurl -s --compressed \"https://koide3.github.io/ppa/ubuntu2004/KEY.gpg\" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/koide3_ppa.gpg \u003e/dev/null\necho \"deb [signed-by=/etc/apt/trusted.gpg.d/koide3_ppa.gpg] https://koide3.github.io/ppa/ubuntu2004 ./\" | sudo tee /etc/apt/sources.list.d/koide3_ppa.list\n\nsudo apt update \u0026\u0026 sudo apt install -y libiridescence-dev\n```\n\n\n## Use Iridescence in your cmake project\n\n```cmake\n# Find package\nfind_package(Iridescence REQUIRED)\n\n# Add include dirs and link libraries\nadd_executable(your_program\n  src/your_program.cpp\n)\ntarget_link_libraries(your_program\n  Iridescence::Iridescence\n)\n```\n\n\n## Minimum example\n\nC++:\n```cpp\n#include \u003cglk/primitives/primitives.hpp\u003e\n#include \u003cguik/viewer/light_viewer.hpp\u003e\n\nint main(int argc, char** argv) {\n  // Create a viewer instance (global singleton)\n  auto viewer = guik::LightViewer::instance();\n\n  float angle = 0.0f;\n\n  // Register a callback for UI rendering\n  viewer-\u003eregister_ui_callback(\"ui\", [\u0026]() {\n    // In the callback, you can call ImGui commands to create your UI.\n    // Here, we use \"DragFloat\" and \"Button\" to create a simple UI.\n    ImGui::DragFloat(\"Angle\", \u0026angle, 0.01f);\n\n    if (ImGui::Button(\"Close\")) {\n      viewer-\u003eclose();\n    }\n  });\n\n  // Spin the viewer until it gets closed\n  while (viewer-\u003espin_once()) {\n    // Objects to be rendered are called \"drawables\" and managed with unique names.\n    // Here, solid and wire spheres are registered to the viewer respectively with the \"Rainbow\" and \"FlatColor\" coloring schemes.\n    // The \"Rainbow\" coloring scheme encodes the height of each fragment using the turbo colormap by default.\n    Eigen::AngleAxisf transform(angle, Eigen::Vector3f::UnitZ());\n    viewer-\u003eupdate_drawable(\"sphere\", glk::Primitives::sphere(), guik::Rainbow(transform));\n    viewer-\u003eupdate_drawable(\"wire_sphere\", glk::Primitives::wire_sphere(), guik::FlatColor({0.1f, 0.7f, 1.0f, 1.0f}, transform));\n  }\n\n  return 0;\n}\n```\n\n\u003cdetails\u003e\n  \u003csummary\u003ePython version\u003c/summary\u003e\n\n```py\n#!/usr/bin/python3\nimport numpy\nfrom scipy.spatial.transform import Rotation\n\nfrom pyridescence import *\n\n# Create a viewer instance (global singleton)\nviewer = guik.LightViewer.instance()\n\nangle = 0.0\n\n# Define a callback for UI rendering\ndef ui_callback():\n  # In the callback, you can call ImGui commands to create your UI.\n  # Here, we use \"DragFloat\" and \"Button\" to create a simple UI.\n\n  global angle\n  _, angle = imgui.drag_float('angle', angle, 0.01)\n\n  if imgui.button('close'):\n    viewer.close()\n\n# Register a callback for UI rendering\nviewer.register_ui_callback('ui', ui_callback)\n\n# Spin the viewer until it gets closed\nwhile viewer.spin_once():\n  # Objects to be rendered are called \"drawables\" and managed with unique names.\n  # Here, solid and wire spheres are registered to the viewer respectively with the \"Rainbow\" and \"FlatColor\" coloring schemes.\n  # The \"Rainbow\" coloring scheme encodes the height of each fragment using the turbo colormap by default.\n  transform = numpy.identity(4)\n  transform[:3, :3] = Rotation.from_rotvec([0.0, 0.0, angle]).as_matrix()\n  viewer.update_drawable('sphere', glk.primitives.sphere(), guik.Rainbow(transform))\n  viewer.update_drawable('wire_sphere', glk.primitives.wire_sphere(), guik.FlatColor(0.1, 0.7, 1.0, 1.0, transform))\n\n```\n\u003c/details\u003e\n\n\n![example_01](https://user-images.githubusercontent.com/31344317/210127177-31630466-f8a1-45b6-8bc7-2fdd2e4c9548.gif)\n\nSee **[documentation](https://koide3.github.io/iridescence/)** for details.\n\n## Some use examples in my academic works\n\n![ral2021](https://user-images.githubusercontent.com/31344317/210128637-80f79abf-69c3-479c-91e9-0807e5b8b3ae.jpg)\n![iros2022](https://user-images.githubusercontent.com/31344317/210128635-2ef02dff-3d74-499e-bde8-2c9c0dc047ff.jpg)\n\n## License\n\nThis package is released under the MIT license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoide3%2Firidescence","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkoide3%2Firidescence","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoide3%2Firidescence/lists"}