point_glass_opengl 0.1.0 copy "point_glass_opengl: ^0.1.0" to clipboard
point_glass_opengl: ^0.1.0 copied to clipboard

A Flutter package for high-performance 3D point cloud visualization using native Rust and OpenGL rendering.

point_glass_opengl #

A Flutter package for high-performance 3D point cloud visualization using native Rust and OpenGL rendering.

point_glass_opengl provides a native offscreen rendering pipeline for visualizing point cloud data in Flutter desktop applications. It supports OpenGL-based rendering, interactive 3D camera controls, grid and axis overlays, label projection, and real-time display parameter updates.

Features #

  • Native 3D Rendering: Rust-based OpenGL rendering core for high-performance 3D visualization.
  • Point Cloud Rendering: FFI-based point cloud rendering pipeline with VBO support.
  • Offscreen Rendering: FBO- and glReadPixels-based rendering for Flutter texture integration.
  • 3D Camera Controls: Built-in orbit, pan, roll, and zoom controls.
  • Visualization Overlays: Grid, axis, and 3D-to-2D label projection support.
  • Depth-based Color Mapping: Real-time point cloud color mapping using a value range.
  • Display Controls: Runtime control of point size, alpha, value range, and color mode.
  • Declarative Flutter API: Flutter-friendly viewer models and external controller support.

Platform Support #

Platform Status
Windows Supported
Linux Supported
macOS Not supported yet
Android Not supported yet
iOS Not supported yet
Web Not supported

Installation #

Add this to your package's pubspec.yaml file:

dependencies:
  point_glass_opengl: ^0.1.0

Then run:

flutter pub get

Basic Usage #

import 'package:flutter/material.dart';
import 'package:point_glass_opengl/point_glass_opengl.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        body: PointGlassExample(),
      ),
    );
  }
}

class PointGlassExample extends StatefulWidget {
  const PointGlassExample({super.key});

  @override
  State<PointGlassExample> createState() => _PointGlassExampleState();
}

class _PointGlassExampleState extends State<PointGlassExample> {
  final PointGlassOpenGLController _controller = PointGlassOpenGLController();

  @override
  Widget build(BuildContext context) {
    return PointGlassOpenGLViewer(
      controller: _controller,
      grid: PointGlassOpenGLGrid(),
      axis: PointGlassOpenGLAxis(),
    );
  }
}

Updating Point Cloud Data #

Use PointGlassOpenGLController to update point cloud data at runtime.

Point cloud data should be passed as a Float32List.

Each point uses the following format:

[X, Y, Z, Value]

Example:

import 'dart:typed_data';

final pointData = Float32List.fromList([
  // x, y, z, value
  0.0, 0.0, 0.0, 0.0,
  1.0, 0.0, 0.5, 0.5,
  0.0, 1.0, 1.0, 1.0,
]);

_controller.setPoints(pointData);

Display Parameters #

Point cloud display properties can be updated in real time.

The valueMin and valueMax values are used by shader-based color mapping modes such as viridis.

_controller.setPointCloudDisplayParams(
  0.8, // alpha
  3.0, // point size
  -2.0, // minimum value for color mapping
  5.0, // maximum value for color mapping
  PointGlassOpenGLPointsColorMode.viridis,
);

Primitive Data Format #

Lines and polygons use the following format:

[X, Y, Z, R, G, B, A, Size/Thickness]

Example:

final lineData = Float32List.fromList([
  // x, y, z, r, g, b, a, thickness
  -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 2.0,
   1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 2.0,
]);

_controller.setLines(lineData);
final polygonData = Float32List.fromList([
  // x, y, z, r, g, b, a, size
  0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.5, 1.0,
  1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.5, 1.0,
  0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.5, 1.0,
]);

_controller.setPolygons(polygonData);

Camera Controls #

The controller provides camera APIs that can be connected to mouse, touch, keyboard, or custom input handlers.

_controller.changeCameraAngle(deltaX, deltaY);
_controller.panCamera(deltaX, deltaY);
_controller.rollCamera(deltaZ);
_controller.changeCameraZoom(scaleFactor);

Interaction Examples #

Action API
Orbit changeCameraAngle(deltaX, deltaY)
Pan panCamera(deltaX, deltaY)
Roll rollCamera(deltaZ)
Zoom changeCameraZoom(scaleFactor)

Viewer Components #

point_glass_opengl includes several built-in visualization components:

  • PointGlassOpenGLViewer for rendering the 3D scene.
  • PointGlassOpenGLController for updating data and controlling the viewer.
  • PointGlassOpenGLGrid for 3D grid rendering.
  • PointGlassOpenGLAxis for X/Y/Z axis rendering.
  • PointGlassOpenGLLabel for projecting 3D labels onto the 2D screen.
  • PointGlassOpenGLPoints for point cloud model data.

Architecture #

This package uses a native rendering pipeline designed for real-time point cloud visualization.

Flutter UI Layer
  - Declarative viewer models
  - User input handling
  - Controller API

C++ Plugin Layer
  - Flutter texture integration
  - Platform-specific native bridge
  - Texture lifecycle management

Rust Core Layer
  - OpenGL context control
  - Shader and buffer management
  - Point cloud VBO rendering
  - 3D math and projection

Notes #

  • This package currently focuses on Windows and Linux desktop environments.
  • Web and mobile platforms are not supported in the current release.
  • Point cloud data must be provided as Float32List.
  • Point data uses 4 float values per point: X, Y, Z, and Value.
  • Line and polygon data use 8 float values per vertex: X, Y, Z, R, G, B, A, and Size/Thickness.

Examples #

Check out the example project for a complete working implementation.

cd example
flutter pub get
flutter run

Additional Information #

0
likes
160
points
--
downloads

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

A Flutter package for high-performance 3D point cloud visualization using native Rust and OpenGL rendering.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

ffi, flutter, plugin_platform_interface, vector_math

More

Packages that depend on point_glass_opengl

Packages that implement point_glass_opengl