VTK  9.1.0
vtkShadowMapBakerPass.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkShadowMapBakerPass.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
70#ifndef vtkShadowMapBakerPass_h
71#define vtkShadowMapBakerPass_h
72
73#include "vtkOpenGLRenderPass.h"
74#include "vtkRenderingOpenGL2Module.h" // For export macro
75#include "vtkSmartPointer.h" // for ivars
76#include <vector> // STL Header
77
80class vtkCamera;
81class vtkLight;
84
85class VTKRENDERINGOPENGL2_EXPORT vtkShadowMapBakerPass : public vtkOpenGLRenderPass
86{
87public:
90 void PrintSelf(ostream& os, vtkIndent indent) override;
91
96 void Render(const vtkRenderState* s) override;
97
104
106
112 vtkGetObjectMacro(OpaqueSequence, vtkRenderPass);
113 virtual void SetOpaqueSequence(vtkRenderPass* opaqueSequence);
115
117
123 vtkGetObjectMacro(CompositeZPass, vtkRenderPass);
124 virtual void SetCompositeZPass(vtkRenderPass* compositeZPass);
126
128
133 vtkSetMacro(Resolution, unsigned int);
134 vtkGetMacro(Resolution, unsigned int);
136
145
156
163 std::vector<vtkSmartPointer<vtkTextureObject>>* GetShadowMaps();
164
171 std::vector<vtkSmartPointer<vtkCamera>>* GetLightCameras();
172
182
183 // // Description:
184 // INTERNAL USE ONLY.
185 // Internally used by vtkShadowMapBakerPass and vtkShadowMapPass.
186 //
187 // Set NeedUpate to false. Called by vtkShadowMapPass.
189
190protected:
195
200
201 // vtkOpenGLRenderPass virtuals:
202 bool PreReplaceShaderValues(std::string& vertexShader, std::string& geometryShader,
203 std::string& fragmentShader, vtkAbstractMapper* mapper, vtkProp* prop) override;
205 vtkOpenGLVertexArrayObject* VAO = nullptr) override;
206
215 double* v, double* pt, double* dir, double& mNear, double& mFar, bool initialized);
216
223 void BoxNearFar(double* bb, double* pt, double* dir, double& mNear, double& mFar);
224
230 void BuildCameraLight(vtkLight* light, double* boundingBox, vtkCamera* lcamera);
231
237
239
241
242 unsigned int Resolution;
243
245
250
251 std::vector<vtkSmartPointer<vtkTextureObject>>* ShadowMaps;
252 std::vector<vtkSmartPointer<vtkCamera>>* LightCameras;
253
257
258private:
260 void operator=(const vtkShadowMapBakerPass&) = delete;
261};
262
263#endif
abstract class specifies interface to map data
a virtual camera for 3D rendering
Definition: vtkCamera.h:155
a simple class to control print indentation
Definition: vtkIndent.h:113
Key for integer values in vtkInformation.
a virtual light for 3D rendering
Definition: vtkLight.h:166
Internal class which encapsulates OpenGL FramebufferObject.
Abstract render pass with shader modifications.
OpenGL rendering window.
The VertexArrayObject class uses, or emulates, vertex array objects.
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:76
Perform part of the rendering of a vtkRenderer.
Definition: vtkRenderPass.h:57
Context in which a vtkRenderPass will render.
The ShaderProgram uses one or more Shader objects.
Implement a builder of shadow map pass.
bool SetShaderParameters(vtkShaderProgram *program, vtkAbstractMapper *mapper, vtkProp *prop, vtkOpenGLVertexArrayObject *VAO=nullptr) override
Update the uniforms of the shader program.
vtkShadowMapBakerPass()
Default constructor.
bool PreReplaceShaderValues(std::string &vertexShader, std::string &geometryShader, std::string &fragmentShader, vtkAbstractMapper *mapper, vtkProp *prop) override
Use vtkShaderProgram::Substitute to replace.
virtual void SetOpaqueSequence(vtkRenderPass *opaqueSequence)
Delegate for rendering the camera, lights, and opaque geometry.
void CheckSupport(vtkOpenGLRenderWindow *w)
Check if shadow mapping is supported by the current OpenGL context.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
std::vector< vtkSmartPointer< vtkCamera > > * LightCameras
void BoxNearFar(double *bb, double *pt, double *dir, double &mNear, double &mFar)
Compute the min/max of the projection of a box in a given direction.
bool LightCreatesShadow(vtkLight *l)
INTERNAL USE ONLY.
~vtkShadowMapBakerPass() override
Destructor.
void PointNearFar(double *v, double *pt, double *dir, double &mNear, double &mFar, bool initialized)
Helper method to compute the mNearest point in a given direction.
void ReleaseGraphicsResources(vtkWindow *w) override
Release graphics resources and ask components to release their own resources.
bool GetHasShadows()
INTERNAL USE ONLY.
std::vector< vtkSmartPointer< vtkTextureObject > > * GetShadowMaps()
INTERNAL USE ONLY Internally used by vtkShadowMapBakerPass and vtkShadowMapPass.
void BuildCameraLight(vtkLight *light, double *boundingBox, vtkCamera *lcamera)
Build a camera from spot light parameters.
static vtkShadowMapBakerPass * New()
std::vector< vtkSmartPointer< vtkCamera > > * GetLightCameras()
INTERNAL USE ONLY.
void Render(const vtkRenderState *s) override
Perform rendering according to a render state s.
vtkOpenGLFramebufferObject * FrameBufferObject
Graphics resources.
bool GetNeedUpdate()
INTERNAL USE ONLY.
std::vector< vtkSmartPointer< vtkTextureObject > > * ShadowMaps
virtual void SetCompositeZPass(vtkRenderPass *compositeZPass)
Delegate for compositing of the shadow maps across processors.
abstracts an OpenGL texture object.
record modification and/or execution time
Definition: vtkTimeStamp.h:52
window superclass for vtkRenderWindow
Definition: vtkWindow.h:39