
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)
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 <a href="https://launchpad.net/~koide3/+archive/ubuntu/iridescence" >PPA</a> (Ubuntu)
# Install from PPA
sudo add-apt-repository -y ppa:koide3/iridescence
sudo apt install libiridescence-dev
Python : Install from <a href="https://pypi.org/project/pyridescence/" >PyPI</a> (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
add_executable(your_program
src/your_program.cpp
)
target_link_libraries(your_program
Iridescence::Iridescence
)
C++ : Minimum example
C++:
int main(int argc, char** argv) {
float angle = 0.0f;
ImGui::DragFloat("Angle", &angle, 0.01f);
if (ImGui::Button("Close")) {
}
});
Eigen::AngleAxisf transform(angle, Eigen::Vector3f::UnitZ());
}
return 0;
}
static glk::Drawable::ConstPtr sphere()
Definition primitives.hpp:46
static glk::Drawable::ConstPtr wire_sphere()
Definition primitives.hpp:62
void update_drawable(const std::string &name, const glk::Drawable::ConstPtr &drawable, const ShaderSetting &shader_setting=ShaderSetting())
static LightViewer * instance(const Eigen::Vector2i &size=Eigen::Vector2i(-1, -1), bool background=false, const std::string &title="screen")
virtual void register_ui_callback(const std::string &name, const std::function< void()> &callback=0) override
LightViewer * viewer(const Eigen::Vector2i &size=Eigen::Vector2i(-1, -1), bool background=false, const std::string &title="screen")
Definition light_viewer.hpp:296
Flat coloring scheme that assigns a single color to the object. If the alpha value is less than 0....
Definition shader_setting.hpp:520
Rainbow coloring scheme that assigns colors to the height (z-value) of pixels of the object....
Definition shader_setting.hpp:508
Python : Minimum example
import numpy
from scipy.spatial.transform import Rotation
from pyridescence import *
angle = 0.0
def ui_callback():
global angle
_, angle = imgui.drag_float('angle', angle, 0.01)
if imgui.button('close'):
viewer.close()
viewer.register_ui_callback('ui', ui_callback)
while viewer.spin_once():
transform = numpy.identity(4)
transform[:3, :3] = Rotation.from_rotvec([0.0, 0.0, angle]).as_matrix()
viewer.update_drawable(
'sphere', glk.primitives.sphere(),
guik.Rainbow(transform))
viewer.update_drawable(
'wire_sphere', glk.primitives.wire_sphere(),
guik.FlatColor(0.1, 0.7, 1.0, 1.0, transform))

See documentation for details.
Some use examples in my academic works

License
This package is released under the MIT license.