image_framework_ymj/include/open3d/visualization/shader/SimpleShader.h
2024-12-06 16:25:16 +08:00

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