114 lines
3.2 KiB
C
114 lines
3.2 KiB
C
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
// Licensed under the MIT License.
|
||
|
|
||
|
#ifndef K4APOINTCLOUDVISUALIZER_H
|
||
|
#define K4APOINTCLOUDVISUALIZER_H
|
||
|
|
||
|
// System headers
|
||
|
//
|
||
|
#include <vector>
|
||
|
|
||
|
// Library headers
|
||
|
//
|
||
|
#include <k4a/k4a.hpp>
|
||
|
|
||
|
// Project headers
|
||
|
//
|
||
|
#include "gpudepthtopointcloudconverter.h"
|
||
|
#include "k4apointcloudrenderer.h"
|
||
|
#include "k4apointcloudviewcontrol.h"
|
||
|
#include "k4aviewerutil.h"
|
||
|
#include "k4aviewerimage.h"
|
||
|
|
||
|
namespace k4aviewer
|
||
|
{
|
||
|
|
||
|
enum class PointCloudVisualizationResult
|
||
|
{
|
||
|
Success,
|
||
|
OpenGlError,
|
||
|
MissingDepthImage,
|
||
|
MissingColorImage,
|
||
|
DepthToXyzTransformationFailed,
|
||
|
DepthToColorTransformationFailed
|
||
|
};
|
||
|
|
||
|
class K4APointCloudVisualizer
|
||
|
{
|
||
|
public:
|
||
|
enum class ColorizationStrategy
|
||
|
{
|
||
|
Simple,
|
||
|
Shaded,
|
||
|
Color
|
||
|
};
|
||
|
|
||
|
GLenum InitializeTexture(std::shared_ptr<K4AViewerImage> *texture) const;
|
||
|
PointCloudVisualizationResult UpdateTexture(std::shared_ptr<K4AViewerImage> *texture, const k4a::capture &capture);
|
||
|
|
||
|
void ProcessMouseMovement(const linmath::vec2 displayDimensions,
|
||
|
const linmath::vec2 mousePos,
|
||
|
const linmath::vec2 mouseDelta,
|
||
|
MouseMovementType movementType);
|
||
|
void ProcessMouseScroll(float yoffset);
|
||
|
|
||
|
void ResetPosition();
|
||
|
|
||
|
PointCloudVisualizationResult SetColorizationStrategy(ColorizationStrategy strategy);
|
||
|
void SetPointSize(int size);
|
||
|
|
||
|
K4APointCloudVisualizer(bool enableColorPointCloud, const k4a::calibration &calibrationData);
|
||
|
~K4APointCloudVisualizer() = default;
|
||
|
|
||
|
K4APointCloudVisualizer(const K4APointCloudVisualizer &) = delete;
|
||
|
K4APointCloudVisualizer &operator=(const K4APointCloudVisualizer &) = delete;
|
||
|
K4APointCloudVisualizer(const K4APointCloudVisualizer &&) = delete;
|
||
|
K4APointCloudVisualizer &operator=(const K4APointCloudVisualizer &&) = delete;
|
||
|
|
||
|
private:
|
||
|
PointCloudVisualizationResult UpdatePointClouds(const k4a::capture &capture);
|
||
|
|
||
|
std::pair<DepthPixel, DepthPixel> m_expectedValueRange;
|
||
|
ImageDimensions m_dimensions;
|
||
|
|
||
|
PointCloudRenderer m_pointCloudRenderer;
|
||
|
ViewControl m_viewControl;
|
||
|
|
||
|
bool m_enableColorPointCloud = false;
|
||
|
ColorizationStrategy m_colorizationStrategy;
|
||
|
|
||
|
linmath::mat4x4 m_projection{};
|
||
|
linmath::mat4x4 m_view{};
|
||
|
|
||
|
OpenGL::Framebuffer m_frameBuffer = OpenGL::Framebuffer(true);
|
||
|
OpenGL::Renderbuffer m_depthBuffer = OpenGL::Renderbuffer(true);
|
||
|
|
||
|
k4a::calibration m_calibrationData;
|
||
|
k4a::transformation m_transformation;
|
||
|
|
||
|
k4a::capture m_lastCapture;
|
||
|
|
||
|
// Buffer that holds the depth image transformed to the color coordinate space.
|
||
|
// Used in color mode only.
|
||
|
//
|
||
|
k4a::image m_transformedDepthImage;
|
||
|
|
||
|
// In color mode, this is just a shallow copy of the latest color image.
|
||
|
// In depth mode, this is a buffer that holds the colorization of the depth image.
|
||
|
//
|
||
|
k4a::image m_pointCloudColorization;
|
||
|
|
||
|
// Holds the XYZ point cloud as a texture.
|
||
|
// Format is XYZA, where A (the alpha channel) is unused.
|
||
|
//
|
||
|
OpenGL::Texture m_xyzTexture;
|
||
|
|
||
|
GpuDepthToPointCloudConverter m_pointCloudConverter;
|
||
|
|
||
|
k4a::image m_colorXyTable;
|
||
|
k4a::image m_depthXyTable;
|
||
|
};
|
||
|
} // namespace k4aviewer
|
||
|
|
||
|
#endif
|