gtsam_points
Loading...
Searching...
No Matches
gtsam_points

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 <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) {
// Create a viewer instance (global singleton)
auto viewer = guik::LightViewer::instance();
float angle = 0.0f;
// Register a callback for UI rendering
viewer->register_ui_callback("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("wire_sphere", glk::Primitives::wire_sphere(), guik::FlatColor({0.1f, 0.7f, 1.0f, 1.0f}, transform));
}
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

#!/usr/bin/python3
import numpy
from scipy.spatial.transform import Rotation
from pyridescence import *
# Create a viewer instance (global singleton)
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.drag_float('angle', angle, 0.01)
if imgui.button('close'):
viewer.close()
# Register a callback for UI rendering
viewer.register_ui_callback('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.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))

example_01

See documentation for details.

Some use examples in my academic works

ral2021 iros2022

License

This package is released under the MIT license.