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

86 lines
2.9 KiB
C++
Executable File

// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2023 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#pragma once
#include "open3d/geometry/Image.h"
#include "open3d/visualization/shader/ShaderWrapper.h"
namespace open3d {
namespace visualization {
namespace glsl {
enum ImageTextureMode { Depth = 0, RGB = 1, Grayscale = 2 };
class RGBDImageShader : public ShaderWrapper {
public:
~RGBDImageShader() override { Release(); }
protected:
RGBDImageShader(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) = 0;
protected:
GLuint vertex_position_;
GLuint vertex_position_buffer_;
GLuint vertex_UV_;
GLuint vertex_UV_buffer_;
GLuint image_texture_;
GLuint color_texture_buffer_;
GLuint depth_texture_;
GLuint depth_texture_buffer_;
GLuint vertex_scale_;
GLuint texture_mode_;
GLuint depth_max_;
float depth_max_data_;
float color_rel_ratio_ = 0.5f;
/* Switches corresponding to the glsl shader */
ImageTextureMode depth_texture_mode_;
ImageTextureMode color_texture_mode_;
gl_util::GLVector3f vertex_scale_data_;
};
class RGBDImageShaderForImage : public RGBDImageShader {
public:
RGBDImageShaderForImage() : RGBDImageShader("RGBDImageShaderForImage") {}
protected:
virtual bool PrepareRendering(const geometry::Geometry &geometry,
const RenderOption &option,
const ViewControl &view) final;
virtual bool PrepareBinding(const geometry::Geometry &geometry,
const RenderOption &option,
const ViewControl &view) final;
};
} // namespace glsl
} // namespace visualization
} // namespace open3d