215 lines
8.3 KiB
C++
Executable File
215 lines
8.3 KiB
C++
Executable File
// ----------------------------------------------------------------------------
|
|
// - Open3D: www.open3d.org -
|
|
// ----------------------------------------------------------------------------
|
|
// Copyright (c) 2018-2023 www.open3d.org
|
|
// SPDX-License-Identifier: MIT
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include <Eigen/Core>
|
|
#include <vector>
|
|
|
|
#include "open3d/visualization/shader/ShaderWrapper.h"
|
|
|
|
namespace open3d {
|
|
namespace visualization {
|
|
|
|
namespace glsl {
|
|
|
|
class SimpleShader : public ShaderWrapper {
|
|
public:
|
|
~SimpleShader() override { Release(); }
|
|
|
|
protected:
|
|
SimpleShader(const std::string &name) : ShaderWrapper(name) { Compile(); }
|
|
|
|
protected:
|
|
bool Compile() final;
|
|
void Release() final;
|
|
bool BindGeometry(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
bool RenderGeometry(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
void UnbindGeometry() final;
|
|
|
|
protected:
|
|
virtual bool PrepareRendering(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) = 0;
|
|
virtual bool PrepareBinding(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view,
|
|
std::vector<Eigen::Vector3f> &points,
|
|
std::vector<Eigen::Vector3f> &colors) = 0;
|
|
|
|
protected:
|
|
GLuint vertex_position_;
|
|
GLuint vertex_position_buffer_;
|
|
GLuint vertex_color_;
|
|
GLuint vertex_color_buffer_;
|
|
GLuint MVP_;
|
|
};
|
|
|
|
class SimpleShaderForPointCloud : public SimpleShader {
|
|
public:
|
|
SimpleShaderForPointCloud() : SimpleShader("SimpleShaderForPointCloud") {}
|
|
|
|
protected:
|
|
bool PrepareRendering(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
bool PrepareBinding(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view,
|
|
std::vector<Eigen::Vector3f> &points,
|
|
std::vector<Eigen::Vector3f> &colors) final;
|
|
};
|
|
|
|
class SimpleShaderForLineSet : public SimpleShader {
|
|
public:
|
|
SimpleShaderForLineSet() : SimpleShader("SimpleShaderForLineSet") {}
|
|
|
|
protected:
|
|
bool PrepareRendering(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
bool PrepareBinding(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view,
|
|
std::vector<Eigen::Vector3f> &points,
|
|
std::vector<Eigen::Vector3f> &colors) final;
|
|
};
|
|
|
|
class SimpleShaderForTetraMesh : public SimpleShader {
|
|
public:
|
|
SimpleShaderForTetraMesh() : SimpleShader("SimpleShaderForTetraMesh") {}
|
|
|
|
protected:
|
|
bool PrepareRendering(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
bool PrepareBinding(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view,
|
|
std::vector<Eigen::Vector3f> &points,
|
|
std::vector<Eigen::Vector3f> &colors) final;
|
|
};
|
|
|
|
class SimpleShaderForOrientedBoundingBox : public SimpleShader {
|
|
public:
|
|
SimpleShaderForOrientedBoundingBox()
|
|
: SimpleShader("SimpleShaderForOrientedBoundingBox") {}
|
|
|
|
protected:
|
|
bool PrepareRendering(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
bool PrepareBinding(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view,
|
|
std::vector<Eigen::Vector3f> &points,
|
|
std::vector<Eigen::Vector3f> &colors) final;
|
|
};
|
|
|
|
class SimpleShaderForAxisAlignedBoundingBox : public SimpleShader {
|
|
public:
|
|
SimpleShaderForAxisAlignedBoundingBox()
|
|
: SimpleShader("SimpleShaderForAxisAlignedBoundingBox") {}
|
|
|
|
protected:
|
|
bool PrepareRendering(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
bool PrepareBinding(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view,
|
|
std::vector<Eigen::Vector3f> &points,
|
|
std::vector<Eigen::Vector3f> &colors) final;
|
|
};
|
|
|
|
class SimpleShaderForTriangleMesh : public SimpleShader {
|
|
public:
|
|
SimpleShaderForTriangleMesh()
|
|
: SimpleShader("SimpleShaderForTriangleMesh") {}
|
|
|
|
protected:
|
|
bool PrepareRendering(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
bool PrepareBinding(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view,
|
|
std::vector<Eigen::Vector3f> &points,
|
|
std::vector<Eigen::Vector3f> &colors) final;
|
|
};
|
|
|
|
class SimpleShaderForVoxelGridLine : public SimpleShader {
|
|
public:
|
|
SimpleShaderForVoxelGridLine()
|
|
: SimpleShader("SimpleShaderForVoxelGridLine") {}
|
|
|
|
protected:
|
|
bool PrepareRendering(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
bool PrepareBinding(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view,
|
|
std::vector<Eigen::Vector3f> &points,
|
|
std::vector<Eigen::Vector3f> &colors) final;
|
|
};
|
|
|
|
class SimpleShaderForVoxelGridFace : public SimpleShader {
|
|
public:
|
|
SimpleShaderForVoxelGridFace()
|
|
: SimpleShader("SimpleShaderForVoxelGridFace") {}
|
|
|
|
protected:
|
|
bool PrepareRendering(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
bool PrepareBinding(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view,
|
|
std::vector<Eigen::Vector3f> &points,
|
|
std::vector<Eigen::Vector3f> &colors) final;
|
|
};
|
|
|
|
class SimpleShaderForOctreeLine : public SimpleShader {
|
|
public:
|
|
SimpleShaderForOctreeLine() : SimpleShader("SimpleShaderForOctreeLine") {}
|
|
|
|
protected:
|
|
bool PrepareRendering(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
bool PrepareBinding(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view,
|
|
std::vector<Eigen::Vector3f> &points,
|
|
std::vector<Eigen::Vector3f> &colors) final;
|
|
};
|
|
|
|
class SimpleShaderForOctreeFace : public SimpleShader {
|
|
public:
|
|
SimpleShaderForOctreeFace() : SimpleShader("SimpleShaderForOctreeFace") {}
|
|
|
|
protected:
|
|
bool PrepareRendering(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view) final;
|
|
bool PrepareBinding(const geometry::Geometry &geometry,
|
|
const RenderOption &option,
|
|
const ViewControl &view,
|
|
std::vector<Eigen::Vector3f> &points,
|
|
std::vector<Eigen::Vector3f> &colors) final;
|
|
};
|
|
|
|
} // namespace glsl
|
|
|
|
} // namespace visualization
|
|
} // namespace open3d
|