koide3
iridescence
C++

Visualization library for rapid prototyping of 3D algorithms [C++, Python]

Last updated Jul 7, 2026
516
Stars
65
Forks
20
Issues
+5
Stars/day
Attention Score
93
Language breakdown
C++ 84.9%
Python 9.4%
GLSL 4.0%
CMake 1.5%
Dockerfile 0.2%
Shell 0.0%
Files click to expand
README

Iridescence

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 focuing on point-cloud-related algorithms) and is NOT intended to be a general-purpose visualization library with rich rendering capabilities.

Documentation (en), Documentation (日本語), API(C++), API(Python)

ppa PyPI - Version Build on Ubuntu 22.04 / 24.04 and Windows

Features

What this library provides:

  • An easy-to-use 3D visualization framework (inpaticular suitable for rendering point clouds)
  • Tightly integrated Dear ImGui interfaces for rapid UI design
What this library does NOT provide:
  • Realistic rendering and shading
  • Rich textured 3D mesh rendering
See documentation for details.

Dependencies

Installation

C++ : Install from PPA (Ubuntu)

# Install from PPA
sudo add-apt-repository -y ppa:koide3/iridescence
sudo apt install libiridescence-dev

Python : Install from PyPI (Ubuntu and Windows)

Note : Source installation is required for Python 3.14.

# Install from PyPI
pip install pyridescence

Install from source

C++ : Install from source (Ubuntu)

# Install dependencies
sudo apt-get install -y libglm-dev libglfw3-dev libpng-dev libjpeg-dev libeigen3-dev

Build and install Iridescence

git clone https://github.com/koide3/iridescence --recursive mkdir iridescence/build && cd iridescence/build cmake .. make -j sudo make install

Python : Install from source

git clone https://github.com/koide3/iridescence --recursive
cd iridescence
pip install .

Usage

C++ : Use Iridescence in your cmake project

# Find package
find_package(Iridescence REQUIRED)

Add include dirs and link libraries

addexecutable(yourprogram src/your_program.cpp ) targetlinklibraries(your_program Iridescence::Iridescence )

C++ : Minimum example

C++:

#include <glk/primitives/primitives.hpp> #include <guik/viewer/light_viewer.hpp>

int main(int argc, char** argv) { // Create a viewer instance (global singleton) auto viewer = guik::LightViewer::instance();

float angle = 0.0f;

// Register a callback for UI rendering viewer->registeruicallback("ui", [&]() { // In the callback, you can call ImGui commands to create your UI. // Here, we use "DragFloat" and "Button" to create a simple UI. ImGui::DragFloat("Angle", &angle, 0.01f);

if (ImGui::Button("Close")) { viewer->close(); } });

// Spin the viewer until it gets closed while (viewer->spin_once()) { // Objects to be rendered are called "drawables" and managed with unique names. // Here, solid and wire spheres are registered to the viewer respectively with // the "Rainbow" and "FlatColor" coloring schemes. // The "Rainbow" coloring scheme encodes the height of each fragment using the // turbo colormap by default. Eigen::AngleAxisf transform(angle, Eigen::Vector3f::UnitZ()); viewer->update_drawable("sphere", glk::Primitives::sphere(), guik::Rainbow(transform)); viewer->updatedrawable("wiresphere", glk::Primitives::wire_sphere(), guik::FlatColor({0.1f, 0.7f, 1.0f, 1.0f}, transform)); }

return 0; }

Python : Minimum example

#!/usr/bin/python3
import numpy
from scipy.spatial.transform import Rotation

from pyridescence import *

Create a viewer instance (global singleton)

viewer = guik.LightViewer.instance()

angle = 0.0

Define a callback for UI rendering

def ui_callback(): # In the callback, you can call ImGui commands to create your UI. # Here, we use "DragFloat" and "Button" to create a simple UI.

global angle , angle = imgui.dragfloat('angle', angle, 0.01)

if imgui.button('close'): viewer.close()

Register a callback for UI rendering

viewer.registeruicallback('ui', ui_callback)

Spin the viewer until it gets closed

while viewer.spin_once(): # Objects to be rendered are called "drawables" and managed with unique names. # Here, solid and wire spheres are registered to the viewer respectively with # the "Rainbow" and "FlatColor" coloring schemes. # The "Rainbow" coloring scheme encodes the height of each fragment using the # turbo colormap by default. transform = numpy.identity(4) transform[:3, :3] = Rotation.fromrotvec([0.0, 0.0, angle]).asmatrix() viewer.update_drawable('sphere', glk.primitives.sphere(), guik.Rainbow(transform)) viewer.updatedrawable('wiresphere', glk.primitives.wire_sphere(), guik.FlatColor(0.1, 0.7, 1.0, 1.0, transform))

example_01

See documentation for details.

Some use examples in my academic works

ral2021 iros2022

License

This package is released under the MIT license.

🔗 More in this category

© 2026 GitRepoTrend · koide3/iridescence · Updated daily from GitHub