Skip to content

Adds the ability to render generic PCLPointcloud2s and LAS/LAZ in the new Qt3D 5.8/5.9

License

GPL-3.0, LGPL-3.0 licenses found

Licenses found

GPL-3.0
LICENSE
LGPL-3.0
LICENSE.LGPLv3
Notifications You must be signed in to change notification settings

MASKOR/Qt3DPointcloudRenderer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Qt3DPointcloudRenderer

Adds C++ Classes and Qmltypes for rendering Point Cloud Library Pointcloud2 and libLAS pointclouds. Interfaces to both libraries look the same in qml. PCL or libLAS can be disabled to avoid the dependency to one of the libraries. This library adds classes to be used with the Qt3D GeometryRenderer-Component. Moreover a Qml-Pointcloud type and pcd/ply-reader exist. The compiled library can be used by a program, that does not need PCL/libLAS-headers. Pointclouds are read-only. However Qml binding re-evaluate if the internal pointcloud is changed.

Qml Types

  • Pointcloud: Wraps pcl::PCLPointCloud2; Reads LAS files using a provided liblas::Reader (TODO: this is only C++ yet)
  • Pointfield: Wraps pcl::PCLPointField
  • PointcloudReader: Wraps pcl::PCDReader and pcl::PLYReader
  • QPointcloudGeometry: Can be used as Qt3DRender::QGeometry to render a Pointcloud using Qt3DRender::GeometryRenderer

Usage

Register Qml-Types:

qmlRegisterType<QPointCloudReader>("pcl", 1, 0, "PointcloudReader");
qmlRegisterType<QPointcloud>("pcl", 1, 0, "Pointcloud");
qmlRegisterType<QPointcloudGeometry>("pcl", 1, 0, "PointcloudGeometry");
qmlRegisterUncreatableType<QPointfield>("pcl", 1, 0, "Pointfield", "Can not yet be created in qml, use PointcloudReader.");

Read Pointcloud in Qml:

PointcloudReader {
    id: pointcloudreader
    filename: "data/bunny.pcd"
}

Add your Pointcloud-Entity to the scenegraph.

Entity {
    id: pointcloud
    property Layer layerPoints: Layer {
            names: "points"
        }
    property GeometryRenderer pointcloudMesh: GeometryRenderer {
            geometry: PointcloudGeometry { pointcloud: pointcloudreader.pointcloud }
            primitiveType: GeometryRenderer.Points
        }
    property Material materialPoint: PerVertexColorMaterial {}
    components: [ pointcloudMesh, materialPoint, meshTransform, layerPoints ]
}

The layer is needed to identify pointclouds in the framegraph:

FrameGraph {
  (...)
    LayerFilter {
        layers: ["points"]
        StateSet {
            renderStates: [
                //PointSize { specification: PointSize.StaticValue; value: 5 /*pixels*/ },
                PointSize { specification: PointSize.Programmable },
                DepthTest { func: DepthTest.Less },
                DepthMask { mask: true }
            ]
        }
    }
  (...)
}

Instead of PerVertexColorMaterial, a custom shader can be used to enable programmable per vertex point size:

property Material materialPoint: Material {
    effect: Effect {
        techniques: Technique {
            renderPasses: RenderPass {
                shaderProgram: ShaderProgram {
                    vertexShaderCode: loadSource("qrc:/shader/pointcloud.vert")
                    fragmentShaderCode: loadSource("qrc:/shader/pointcloud.frag")
                }
            }
        }
    }
    parameters: Parameter { name: "pointSize"; value: 0.1 }
}

About

Adds the ability to render generic PCLPointcloud2s and LAS/LAZ in the new Qt3D 5.8/5.9

Resources

License

GPL-3.0, LGPL-3.0 licenses found

Licenses found

GPL-3.0
LICENSE
LGPL-3.0
LICENSE.LGPLv3

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published