ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
TextureRenderManager.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <memory>
11 #include <vector>
12 
14 
15 class vtkActor;
16 class vtkLODActor;
17 class vtkPolyData;
18 class vtkRenderer;
19 class ccMaterialSet;
20 
21 namespace PclUtils {
22 namespace renders {
23 
33 public:
36 
45  bool Apply(vtkLODActor* actor,
46  const ccMaterialSet* materials,
47  vtkPolyData* polydata,
48  vtkRenderer* renderer);
49 
58  bool Update(vtkActor* actor,
59  const ccMaterialSet* materials,
60  vtkPolyData* polydata,
61  vtkRenderer* renderer);
62 
68  TextureRendererBase* SelectRenderer(const ccMaterialSet* materials) const;
69 
74 
75 private:
79  void InitializeRenderers();
80 
84  struct MaterialAnalysis {
85  bool has_pbr_textures = false;
86  bool has_multiple_map_kd = false;
87  bool has_any_texture = false; // Any texture type (not just PBR)
88  size_t material_count = 0;
89  };
90  MaterialAnalysis AnalyzeMaterials(const ccMaterialSet* materials) const;
91 
92  // Helper method to check if materials have any texture files
93  bool HasAnyTextureFiles(const ccMaterialSet* materials) const;
94 
95  std::vector<std::unique_ptr<TextureRendererBase>> renderers_;
96 };
97 
98 } // namespace renders
99 } // namespace PclUtils
TextureRendererBase * SelectRenderer(const ccMaterialSet *materials) const
Detect and select appropriate renderer for materials.
bool Update(vtkActor *actor, const ccMaterialSet *materials, vtkPolyData *polydata, vtkRenderer *renderer)
Update existing actor with new materials.
TextureRendererBase * GetRenderer(RenderingMode mode) const
Get renderer by mode.
bool Apply(vtkLODActor *actor, const ccMaterialSet *materials, vtkPolyData *polydata, vtkRenderer *renderer)
Apply rendering to actor.
Base class for all texture renderers.
Mesh (triangle) material.
RenderingMode
Rendering mode enumeration.