mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0031129: Visualization - revise background / environment API
This commit is contained in:
@@ -26,6 +26,7 @@ IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_CView,Graphic3d_DataStructureManager)
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
Graphic3d_CView::Graphic3d_CView (const Handle(Graphic3d_StructureManager)& theMgr)
|
Graphic3d_CView::Graphic3d_CView (const Handle(Graphic3d_StructureManager)& theMgr)
|
||||||
: myBgColor (Quantity_NOC_BLACK),
|
: myBgColor (Quantity_NOC_BLACK),
|
||||||
|
myBackgroundType (Graphic3d_TOB_NONE),
|
||||||
myStructureManager (theMgr),
|
myStructureManager (theMgr),
|
||||||
myCamera (new Graphic3d_Camera()),
|
myCamera (new Graphic3d_Camera()),
|
||||||
myHiddenObjects (new Graphic3d_NMapOfTransient()),
|
myHiddenObjects (new Graphic3d_NMapOfTransient()),
|
||||||
|
@@ -35,6 +35,7 @@
|
|||||||
#include <Graphic3d_TextureEnv.hxx>
|
#include <Graphic3d_TextureEnv.hxx>
|
||||||
#include <Graphic3d_TypeOfAnswer.hxx>
|
#include <Graphic3d_TypeOfAnswer.hxx>
|
||||||
#include <Graphic3d_TypeOfBackfacingModel.hxx>
|
#include <Graphic3d_TypeOfBackfacingModel.hxx>
|
||||||
|
#include <Graphic3d_TypeOfBackground.hxx>
|
||||||
#include <Graphic3d_TypeOfShadingModel.hxx>
|
#include <Graphic3d_TypeOfShadingModel.hxx>
|
||||||
#include <Graphic3d_TypeOfVisualization.hxx>
|
#include <Graphic3d_TypeOfVisualization.hxx>
|
||||||
#include <Graphic3d_Vec3.hxx>
|
#include <Graphic3d_Vec3.hxx>
|
||||||
@@ -372,7 +373,7 @@ public:
|
|||||||
virtual void SetGradientBackground (const Aspect_GradientBackground& theBackground) = 0;
|
virtual void SetGradientBackground (const Aspect_GradientBackground& theBackground) = 0;
|
||||||
|
|
||||||
//! Returns background image texture map.
|
//! Returns background image texture map.
|
||||||
virtual Handle(Graphic3d_TextureMap) BackgroundImage() = 0;
|
const Handle(Graphic3d_TextureMap)& BackgroundImage() { return myBackgroundImage; }
|
||||||
|
|
||||||
//! Sets image texture or environment cubemap as background.
|
//! Sets image texture or environment cubemap as background.
|
||||||
//! @param theTextureMap [in] source to set a background;
|
//! @param theTextureMap [in] source to set a background;
|
||||||
@@ -389,7 +390,7 @@ public:
|
|||||||
virtual void SetBackgroundImageStyle (const Aspect_FillMethod theFillStyle) = 0;
|
virtual void SetBackgroundImageStyle (const Aspect_FillMethod theFillStyle) = 0;
|
||||||
|
|
||||||
//! Returns cubemap being set last time on background.
|
//! Returns cubemap being set last time on background.
|
||||||
virtual Handle(Graphic3d_CubeMap) BackgroundCubeMap() const = 0;
|
const Handle(Graphic3d_CubeMap)& BackgroundCubeMap() const { return myCubeMapBackground; }
|
||||||
|
|
||||||
//! Generates PBR specular probe and irradiance map
|
//! Generates PBR specular probe and irradiance map
|
||||||
//! in order to provide environment indirect illumination in PBR shading model (Image Based Lighting).
|
//! in order to provide environment indirect illumination in PBR shading model (Image Based Lighting).
|
||||||
@@ -405,7 +406,7 @@ public:
|
|||||||
virtual void ClearPBREnvironment() = 0;
|
virtual void ClearPBREnvironment() = 0;
|
||||||
|
|
||||||
//! Returns environment texture set for the view.
|
//! Returns environment texture set for the view.
|
||||||
virtual Handle(Graphic3d_TextureEnv) TextureEnv() const = 0;
|
const Handle(Graphic3d_TextureEnv)& TextureEnv() const { return myTextureEnvData; }
|
||||||
|
|
||||||
//! Sets environment texture for the view.
|
//! Sets environment texture for the view.
|
||||||
virtual void SetTextureEnv (const Handle(Graphic3d_TextureEnv)& theTextureEnv) = 0;
|
virtual void SetTextureEnv (const Handle(Graphic3d_TextureEnv)& theTextureEnv) = 0;
|
||||||
@@ -568,7 +569,14 @@ protected:
|
|||||||
|
|
||||||
Standard_Integer myId;
|
Standard_Integer myId;
|
||||||
Graphic3d_RenderingParams myRenderParams;
|
Graphic3d_RenderingParams myRenderParams;
|
||||||
Quantity_ColorRGBA myBgColor;
|
|
||||||
|
Quantity_ColorRGBA myBgColor;
|
||||||
|
Handle(Graphic3d_TextureMap) myBackgroundImage;
|
||||||
|
Handle(Graphic3d_CubeMap) myCubeMapBackground; //!< Cubemap displayed at background
|
||||||
|
Handle(Graphic3d_CubeMap) myCubeMapEnvironment; //!< Cubemap used for environment lighting
|
||||||
|
Handle(Graphic3d_TextureEnv) myTextureEnvData;
|
||||||
|
Graphic3d_TypeOfBackground myBackgroundType; //!< Current type of background
|
||||||
|
|
||||||
Handle(Graphic3d_StructureManager) myStructureManager;
|
Handle(Graphic3d_StructureManager) myStructureManager;
|
||||||
Handle(Graphic3d_Camera) myCamera;
|
Handle(Graphic3d_Camera) myCamera;
|
||||||
Graphic3d_SequenceOfStructure myStructsToCompute;
|
Graphic3d_SequenceOfStructure myStructsToCompute;
|
||||||
|
@@ -129,9 +129,8 @@ OpenGl_View::OpenGl_View (const Handle(Graphic3d_StructureManager)& theMgr,
|
|||||||
myIsImmediateDrawn (Standard_False),
|
myIsImmediateDrawn (Standard_False),
|
||||||
myTextureParams (new OpenGl_Aspects()),
|
myTextureParams (new OpenGl_Aspects()),
|
||||||
myCubeMapParams (new OpenGl_Aspects()),
|
myCubeMapParams (new OpenGl_Aspects()),
|
||||||
myBackgroundType (Graphic3d_TOB_NONE),
|
|
||||||
myPBREnvState (OpenGl_PBREnvState_NONEXISTENT),
|
myPBREnvState (OpenGl_PBREnvState_NONEXISTENT),
|
||||||
myPBREnvRequest (OpenGl_PBREnvRequest_NONE),
|
myPBREnvRequest (Standard_False),
|
||||||
// ray-tracing fields initialization
|
// ray-tracing fields initialization
|
||||||
myRaytraceInitStatus (OpenGl_RT_NONE),
|
myRaytraceInitStatus (OpenGl_RT_NONE),
|
||||||
myIsRaytraceDataValid (Standard_False),
|
myIsRaytraceDataValid (Standard_False),
|
||||||
@@ -553,49 +552,58 @@ void OpenGl_View::SetGradientBackground (const Aspect_GradientBackground& theBac
|
|||||||
void OpenGl_View::SetBackgroundImage (const Handle(Graphic3d_TextureMap)& theTextureMap,
|
void OpenGl_View::SetBackgroundImage (const Handle(Graphic3d_TextureMap)& theTextureMap,
|
||||||
Standard_Boolean theToUpdatePBREnv)
|
Standard_Boolean theToUpdatePBREnv)
|
||||||
{
|
{
|
||||||
|
Handle(Graphic3d_TextureMap) aNewMap = theTextureMap;
|
||||||
if (theTextureMap.IsNull()
|
if (theTextureMap.IsNull()
|
||||||
|| !theTextureMap->IsDone())
|
|| !theTextureMap->IsDone())
|
||||||
|
{
|
||||||
|
if (!theTextureMap.IsNull())
|
||||||
|
{
|
||||||
|
Message::SendFail ("Error: unable to set image background");
|
||||||
|
}
|
||||||
|
aNewMap.Nullify();
|
||||||
|
}
|
||||||
|
|
||||||
|
Handle(Graphic3d_CubeMap) aCubeMap = Handle(Graphic3d_CubeMap)::DownCast (aNewMap);
|
||||||
|
if (theToUpdatePBREnv)
|
||||||
|
{
|
||||||
|
const TCollection_AsciiString anIdOld = !myCubeMapEnvironment.IsNull()
|
||||||
|
? myCubeMapEnvironment->GetId()
|
||||||
|
: TCollection_AsciiString();
|
||||||
|
const TCollection_AsciiString anIdNew = !aCubeMap.IsNull()
|
||||||
|
? aCubeMap->GetId()
|
||||||
|
: TCollection_AsciiString();
|
||||||
|
myPBREnvRequest = anIdNew != anIdOld;
|
||||||
|
myCubeMapEnvironment = aCubeMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aNewMap.IsNull())
|
||||||
{
|
{
|
||||||
if (myBackgroundType == Graphic3d_TOB_TEXTURE
|
if (myBackgroundType == Graphic3d_TOB_TEXTURE
|
||||||
|| myBackgroundType == Graphic3d_TOB_CUBEMAP)
|
|| myBackgroundType == Graphic3d_TOB_CUBEMAP)
|
||||||
{
|
{
|
||||||
myBackgroundType = Graphic3d_TOB_NONE;
|
myBackgroundType = Graphic3d_TOB_NONE;
|
||||||
if (theToUpdatePBREnv)
|
|
||||||
{
|
|
||||||
myPBREnvRequest = OpenGl_PBREnvRequest_CLEAR;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle(Graphic3d_AspectFillArea3d) anAspect = new Graphic3d_AspectFillArea3d();
|
Handle(Graphic3d_AspectFillArea3d) anAspect = new Graphic3d_AspectFillArea3d();
|
||||||
Handle(Graphic3d_TextureSet) aTextureSet = new Graphic3d_TextureSet (theTextureMap);
|
Handle(Graphic3d_TextureSet) aTextureSet = new Graphic3d_TextureSet (aNewMap);
|
||||||
anAspect->SetInteriorStyle (Aspect_IS_SOLID);
|
anAspect->SetInteriorStyle (Aspect_IS_SOLID);
|
||||||
anAspect->SetFaceCulling (Graphic3d_TypeOfBackfacingModel_DoubleSided);
|
anAspect->SetFaceCulling (Graphic3d_TypeOfBackfacingModel_DoubleSided);
|
||||||
anAspect->SetShadingModel (Graphic3d_TypeOfShadingModel_Unlit);
|
anAspect->SetShadingModel (Graphic3d_TypeOfShadingModel_Unlit);
|
||||||
anAspect->SetTextureSet (aTextureSet);
|
anAspect->SetTextureSet (aTextureSet);
|
||||||
anAspect->SetTextureMapOn (true);
|
anAspect->SetTextureMapOn (true);
|
||||||
|
|
||||||
if (Handle(Graphic3d_Texture2D) aTextureMap = Handle(Graphic3d_Texture2D)::DownCast (theTextureMap))
|
if (Handle(Graphic3d_Texture2D) aTextureMap = Handle(Graphic3d_Texture2D)::DownCast (aNewMap))
|
||||||
{
|
{
|
||||||
if (theToUpdatePBREnv && myBackgroundType == Graphic3d_TOB_CUBEMAP)
|
|
||||||
{
|
|
||||||
myPBREnvRequest = OpenGl_PBREnvRequest_CLEAR;
|
|
||||||
}
|
|
||||||
|
|
||||||
myTextureParams->SetAspect (anAspect);
|
myTextureParams->SetAspect (anAspect);
|
||||||
myBackgroundType = Graphic3d_TOB_TEXTURE;
|
myBackgroundType = Graphic3d_TOB_TEXTURE;
|
||||||
myBackgroundImage = aTextureMap;
|
myBackgroundImage = aTextureMap;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Handle(Graphic3d_CubeMap) aCubeMap = Handle(Graphic3d_CubeMap)::DownCast (theTextureMap))
|
if (!aCubeMap.IsNull())
|
||||||
{
|
{
|
||||||
if (theToUpdatePBREnv)
|
|
||||||
{
|
|
||||||
myPBREnvRequest = OpenGl_PBREnvRequest_BAKE;
|
|
||||||
}
|
|
||||||
|
|
||||||
aCubeMap->SetMipmapsGeneration (Standard_True);
|
aCubeMap->SetMipmapsGeneration (Standard_True);
|
||||||
if (const Handle(OpenGl_Context)& aCtx = myWorkspace->GetGlContext())
|
if (const Handle(OpenGl_Context)& aCtx = myWorkspace->GetGlContext())
|
||||||
{
|
{
|
||||||
@@ -610,7 +618,7 @@ void OpenGl_View::SetBackgroundImage (const Handle(Graphic3d_TextureMap)& theTex
|
|||||||
myWorkspace->ApplyAspects();
|
myWorkspace->ApplyAspects();
|
||||||
|
|
||||||
myBackgroundType = Graphic3d_TOB_CUBEMAP;
|
myBackgroundType = Graphic3d_TOB_CUBEMAP;
|
||||||
myBackgroundCubeMap = aCubeMap;
|
myCubeMapBackground = aCubeMap;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -635,15 +643,6 @@ void OpenGl_View::SetBackgroundImageStyle (const Aspect_FillMethod theFillStyle)
|
|||||||
myBackgrounds[Graphic3d_TOB_TEXTURE]->SetTextureFillMethod (theFillStyle);
|
myBackgrounds[Graphic3d_TOB_TEXTURE]->SetTextureFillMethod (theFillStyle);
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
|
||||||
// function : BackgroundCubeMap
|
|
||||||
// purpose :
|
|
||||||
// =======================================================================
|
|
||||||
Handle(Graphic3d_CubeMap) OpenGl_View::BackgroundCubeMap() const
|
|
||||||
{
|
|
||||||
return myBackgroundCubeMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : SpecIBLMapLevels
|
// function : SpecIBLMapLevels
|
||||||
// purpose :
|
// purpose :
|
||||||
@@ -955,8 +954,8 @@ void OpenGl_View::drawBackground (const Handle(OpenGl_Workspace)& theWorkspace,
|
|||||||
|
|
||||||
if (myBackgroundType == Graphic3d_TOB_CUBEMAP)
|
if (myBackgroundType == Graphic3d_TOB_CUBEMAP)
|
||||||
{
|
{
|
||||||
myCubeMapParams->Aspect()->ShaderProgram()->PushVariableInt ("uZCoeff", myBackgroundCubeMap->ZIsInverted() ? -1 : 1);
|
myCubeMapParams->Aspect()->ShaderProgram()->PushVariableInt ("uZCoeff", myCubeMapBackground->ZIsInverted() ? -1 : 1);
|
||||||
myCubeMapParams->Aspect()->ShaderProgram()->PushVariableInt ("uYCoeff", myBackgroundCubeMap->IsTopDown() ? 1 : -1);
|
myCubeMapParams->Aspect()->ShaderProgram()->PushVariableInt ("uYCoeff", myCubeMapBackground->IsTopDown() ? 1 : -1);
|
||||||
const OpenGl_Aspects* anOldAspectFace = theWorkspace->SetAspects (myCubeMapParams);
|
const OpenGl_Aspects* anOldAspectFace = theWorkspace->SetAspects (myCubeMapParams);
|
||||||
|
|
||||||
myBackgrounds[Graphic3d_TOB_CUBEMAP]->Render (theWorkspace, theProjection);
|
myBackgrounds[Graphic3d_TOB_CUBEMAP]->Render (theWorkspace, theProjection);
|
||||||
@@ -1203,7 +1202,7 @@ bool OpenGl_View::prepareFrameBuffers (Graphic3d_Camera::Projection& theProj)
|
|||||||
myPBREnvironment->Release (aCtx.get());
|
myPBREnvironment->Release (aCtx.get());
|
||||||
myPBREnvironment.Nullify();
|
myPBREnvironment.Nullify();
|
||||||
myPBREnvState = OpenGl_PBREnvState_NONEXISTENT;
|
myPBREnvState = OpenGl_PBREnvState_NONEXISTENT;
|
||||||
myPBREnvRequest = OpenGl_PBREnvRequest_BAKE;
|
myPBREnvRequest = true;
|
||||||
++myLightsRevision;
|
++myLightsRevision;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1297,7 +1296,7 @@ bool OpenGl_View::prepareFrameBuffers (Graphic3d_Camera::Projection& theProj)
|
|||||||
myWorkspace->ApplyAspects();
|
myWorkspace->ApplyAspects();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
processPBREnvRequest (aCtx);
|
updatePBREnvironment (aCtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create color and coverage accumulation buffers required for OIT algorithm
|
// create color and coverage accumulation buffers required for OIT algorithm
|
||||||
@@ -3042,19 +3041,51 @@ Standard_Boolean OpenGl_View::checkPBRAvailability() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : bakePBREnvironment
|
// function : updatePBREnvironment
|
||||||
// purpose :
|
// purpose :
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
void OpenGl_View::bakePBREnvironment (const Handle(OpenGl_Context)& theCtx)
|
void OpenGl_View::updatePBREnvironment (const Handle(OpenGl_Context)& theCtx)
|
||||||
{
|
{
|
||||||
const Handle(OpenGl_TextureSet)& aTextureSet = myCubeMapParams->TextureSet (theCtx);
|
if (myPBREnvState != OpenGl_PBREnvState_CREATED
|
||||||
if (!aTextureSet.IsNull()
|
|| !myPBREnvRequest)
|
||||||
&& !aTextureSet->IsEmpty())
|
{
|
||||||
|
myPBREnvRequest = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
myPBREnvRequest = false;
|
||||||
|
|
||||||
|
Handle(OpenGl_TextureSet) aGlTextureSet;
|
||||||
|
OpenGl_Aspects* aTmpGlAspects = NULL;
|
||||||
|
if (!myCubeMapEnvironment.IsNull()
|
||||||
|
&& myCubeMapEnvironment == myCubeMapBackground)
|
||||||
|
{
|
||||||
|
aGlTextureSet = myCubeMapParams->TextureSet (theCtx);
|
||||||
|
}
|
||||||
|
else if (!myCubeMapEnvironment.IsNull())
|
||||||
|
{
|
||||||
|
myCubeMapEnvironment->SetMipmapsGeneration (Standard_True);
|
||||||
|
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) anAspect = new Graphic3d_AspectFillArea3d();
|
||||||
|
{
|
||||||
|
Handle(Graphic3d_TextureSet) aTextureSet = new Graphic3d_TextureSet (myCubeMapEnvironment);
|
||||||
|
anAspect->SetInteriorStyle (Aspect_IS_SOLID);
|
||||||
|
anAspect->SetTextureSet (aTextureSet);
|
||||||
|
anAspect->SetTextureMapOn (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
aTmpGlAspects = new OpenGl_Aspects();
|
||||||
|
aTmpGlAspects->SetAspect (anAspect);
|
||||||
|
aGlTextureSet = aTmpGlAspects->TextureSet (theCtx);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!aGlTextureSet.IsNull()
|
||||||
|
&& !aGlTextureSet->IsEmpty())
|
||||||
{
|
{
|
||||||
myPBREnvironment->Bake (theCtx,
|
myPBREnvironment->Bake (theCtx,
|
||||||
aTextureSet->First(),
|
aGlTextureSet->First(),
|
||||||
myBackgroundCubeMap->ZIsInverted(),
|
myCubeMapEnvironment->ZIsInverted(),
|
||||||
myBackgroundCubeMap->IsTopDown(),
|
myCubeMapEnvironment->IsTopDown(),
|
||||||
myRenderParams.PbrEnvBakingDiffNbSamples,
|
myRenderParams.PbrEnvBakingDiffNbSamples,
|
||||||
myRenderParams.PbrEnvBakingSpecNbSamples,
|
myRenderParams.PbrEnvBakingSpecNbSamples,
|
||||||
myRenderParams.PbrEnvBakingProbability);
|
myRenderParams.PbrEnvBakingProbability);
|
||||||
@@ -3063,31 +3094,6 @@ void OpenGl_View::bakePBREnvironment (const Handle(OpenGl_Context)& theCtx)
|
|||||||
{
|
{
|
||||||
myPBREnvironment->Clear (theCtx);
|
myPBREnvironment->Clear (theCtx);
|
||||||
}
|
}
|
||||||
}
|
aGlTextureSet.Nullify();
|
||||||
|
OpenGl_Element::Destroy (theCtx.get(), aTmpGlAspects);
|
||||||
// =======================================================================
|
|
||||||
// function : clearPBREnvironment
|
|
||||||
// purpose :
|
|
||||||
// =======================================================================
|
|
||||||
void OpenGl_View::clearPBREnvironment (const Handle(OpenGl_Context)& theCtx)
|
|
||||||
{
|
|
||||||
myPBREnvironment->Clear (theCtx);
|
|
||||||
}
|
|
||||||
|
|
||||||
// =======================================================================
|
|
||||||
// function : clearPBREnvironment
|
|
||||||
// purpose :
|
|
||||||
// =======================================================================
|
|
||||||
void OpenGl_View::processPBREnvRequest (const Handle(OpenGl_Context)& theCtx)
|
|
||||||
{
|
|
||||||
if (myPBREnvState == OpenGl_PBREnvState_CREATED)
|
|
||||||
{
|
|
||||||
switch (myPBREnvRequest)
|
|
||||||
{
|
|
||||||
case OpenGl_PBREnvRequest_NONE: return;
|
|
||||||
case OpenGl_PBREnvRequest_BAKE: bakePBREnvironment (theCtx); break;
|
|
||||||
case OpenGl_PBREnvRequest_CLEAR: clearPBREnvironment (theCtx); break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
myPBREnvRequest = OpenGl_PBREnvRequest_NONE;
|
|
||||||
}
|
}
|
||||||
|
@@ -16,15 +16,11 @@
|
|||||||
#ifndef _OpenGl_View_Header
|
#ifndef _OpenGl_View_Header
|
||||||
#define _OpenGl_View_Header
|
#define _OpenGl_View_Header
|
||||||
|
|
||||||
#include <Aspect_FillMethod.hxx>
|
|
||||||
#include <Aspect_GradientFillMethod.hxx>
|
|
||||||
#include <Graphic3d_CView.hxx>
|
#include <Graphic3d_CView.hxx>
|
||||||
#include <Graphic3d_CullingTool.hxx>
|
#include <Graphic3d_CullingTool.hxx>
|
||||||
#include <Graphic3d_GraduatedTrihedron.hxx>
|
#include <Graphic3d_GraduatedTrihedron.hxx>
|
||||||
#include <Graphic3d_SequenceOfHClipPlane.hxx>
|
#include <Graphic3d_SequenceOfHClipPlane.hxx>
|
||||||
#include <Graphic3d_ToneMappingMethod.hxx>
|
#include <Graphic3d_ToneMappingMethod.hxx>
|
||||||
#include <Graphic3d_TypeOfBackground.hxx>
|
|
||||||
#include <Graphic3d_TypeOfShadingModel.hxx>
|
|
||||||
#include <Graphic3d_WorldViewProjState.hxx>
|
#include <Graphic3d_WorldViewProjState.hxx>
|
||||||
#include <Graphic3d_ZLayerSettings.hxx>
|
#include <Graphic3d_ZLayerSettings.hxx>
|
||||||
#include <math_BullardGenerator.hxx>
|
#include <math_BullardGenerator.hxx>
|
||||||
@@ -41,7 +37,6 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
class Graphic3d_StructureManager;
|
|
||||||
class OpenGl_BackgroundArray;
|
class OpenGl_BackgroundArray;
|
||||||
class OpenGl_DepthPeeling;
|
class OpenGl_DepthPeeling;
|
||||||
class OpenGl_GraphicDriver;
|
class OpenGl_GraphicDriver;
|
||||||
@@ -206,9 +201,6 @@ public:
|
|||||||
//! Sets gradient background fill colors.
|
//! Sets gradient background fill colors.
|
||||||
Standard_EXPORT virtual void SetGradientBackground (const Aspect_GradientBackground& theBackground) Standard_OVERRIDE;
|
Standard_EXPORT virtual void SetGradientBackground (const Aspect_GradientBackground& theBackground) Standard_OVERRIDE;
|
||||||
|
|
||||||
//! Returns background image texture map.
|
|
||||||
virtual Handle(Graphic3d_TextureMap) BackgroundImage() Standard_OVERRIDE { return myBackgroundImage; }
|
|
||||||
|
|
||||||
//! Sets image texture or environment cubemap as background.
|
//! Sets image texture or environment cubemap as background.
|
||||||
//! @param theTextureMap [in] source to set a background;
|
//! @param theTextureMap [in] source to set a background;
|
||||||
//! should be either Graphic3d_Texture2D or Graphic3d_CubeMap
|
//! should be either Graphic3d_Texture2D or Graphic3d_CubeMap
|
||||||
@@ -217,38 +209,39 @@ public:
|
|||||||
Standard_EXPORT virtual void SetBackgroundImage (const Handle(Graphic3d_TextureMap)& theTextureMap,
|
Standard_EXPORT virtual void SetBackgroundImage (const Handle(Graphic3d_TextureMap)& theTextureMap,
|
||||||
Standard_Boolean theToUpdatePBREnv = Standard_True) Standard_OVERRIDE;
|
Standard_Boolean theToUpdatePBREnv = Standard_True) Standard_OVERRIDE;
|
||||||
|
|
||||||
|
//! Sets environment texture for the view.
|
||||||
|
Standard_EXPORT virtual void SetTextureEnv (const Handle(Graphic3d_TextureEnv)& theTextureEnv) Standard_OVERRIDE;
|
||||||
|
|
||||||
//! Returns background image fill style.
|
//! Returns background image fill style.
|
||||||
Standard_EXPORT virtual Aspect_FillMethod BackgroundImageStyle() const Standard_OVERRIDE;
|
Standard_EXPORT virtual Aspect_FillMethod BackgroundImageStyle() const Standard_OVERRIDE;
|
||||||
|
|
||||||
//! Sets background image fill style.
|
//! Sets background image fill style.
|
||||||
Standard_EXPORT virtual void SetBackgroundImageStyle (const Aspect_FillMethod theFillStyle) Standard_OVERRIDE;
|
Standard_EXPORT virtual void SetBackgroundImageStyle (const Aspect_FillMethod theFillStyle) Standard_OVERRIDE;
|
||||||
|
|
||||||
//! Returns cubemap being set last time on background.
|
|
||||||
Standard_EXPORT Handle(Graphic3d_CubeMap) BackgroundCubeMap() const Standard_OVERRIDE;
|
|
||||||
|
|
||||||
//! Generates PBR specular probe and irradiance map
|
//! Generates PBR specular probe and irradiance map
|
||||||
//! in order to provide environment indirect illumination in PBR shading model (Image Based Lighting).
|
//! in order to provide environment indirect illumination in PBR shading model (Image Based Lighting).
|
||||||
//! The source of environment data is background cubemap.
|
//! The source of environment data is background cubemap.
|
||||||
//! If PBR is unavailable it does nothing.
|
//! If PBR is unavailable it does nothing.
|
||||||
//! If PBR is available but there is no cubemap being set to background it clears all IBL maps (see 'ClearPBREnvironment').
|
//! If PBR is available but there is no cubemap being set to background it clears all IBL maps (see 'ClearPBREnvironment').
|
||||||
virtual void GeneratePBREnvironment() Standard_OVERRIDE { myPBREnvRequest = OpenGl_PBREnvRequest_BAKE; }
|
virtual void GeneratePBREnvironment() Standard_OVERRIDE
|
||||||
|
{
|
||||||
|
myPBREnvRequest = true;
|
||||||
|
}
|
||||||
|
|
||||||
//! Fills PBR specular probe and irradiance map with white color.
|
//! Fills PBR specular probe and irradiance map with white color.
|
||||||
//! So that environment indirect illumination will be constant
|
//! So that environment indirect illumination will be constant
|
||||||
//! and will be fully controlled by ambient light sources.
|
//! and will be fully controlled by ambient light sources.
|
||||||
//! If PBR is unavailable it does nothing.
|
//! If PBR is unavailable it does nothing.
|
||||||
virtual void ClearPBREnvironment() Standard_OVERRIDE { myPBREnvRequest = OpenGl_PBREnvRequest_CLEAR; }
|
virtual void ClearPBREnvironment() Standard_OVERRIDE
|
||||||
|
{
|
||||||
|
myPBREnvRequest = true;
|
||||||
|
myCubeMapEnvironment.Nullify();
|
||||||
|
}
|
||||||
|
|
||||||
//! Returns number of mipmap levels used in specular IBL map.
|
//! Returns number of mipmap levels used in specular IBL map.
|
||||||
//! 0 if PBR environment is not created.
|
//! 0 if PBR environment is not created.
|
||||||
Standard_EXPORT unsigned int SpecIBLMapLevels() const;
|
Standard_EXPORT unsigned int SpecIBLMapLevels() const;
|
||||||
|
|
||||||
//! Returns environment texture set for the view.
|
|
||||||
virtual Handle(Graphic3d_TextureEnv) TextureEnv() const Standard_OVERRIDE { return myTextureEnvData; }
|
|
||||||
|
|
||||||
//! Sets environment texture for the view.
|
|
||||||
Standard_EXPORT virtual void SetTextureEnv (const Handle(Graphic3d_TextureEnv)& theTextureEnv) Standard_OVERRIDE;
|
|
||||||
|
|
||||||
//! Returns local camera origin currently set for rendering, might be modified during rendering.
|
//! Returns local camera origin currently set for rendering, might be modified during rendering.
|
||||||
const gp_XYZ& LocalOrigin() const { return myLocalOrigin; }
|
const gp_XYZ& LocalOrigin() const { return myLocalOrigin; }
|
||||||
|
|
||||||
@@ -470,8 +463,6 @@ protected:
|
|||||||
gp_XYZ myLocalOrigin;
|
gp_XYZ myLocalOrigin;
|
||||||
Handle(OpenGl_FrameBuffer) myFBO;
|
Handle(OpenGl_FrameBuffer) myFBO;
|
||||||
Standard_Boolean myToShowGradTrihedron;
|
Standard_Boolean myToShowGradTrihedron;
|
||||||
Handle(Graphic3d_TextureMap) myBackgroundImage;
|
|
||||||
Handle(Graphic3d_TextureEnv) myTextureEnvData;
|
|
||||||
Graphic3d_GraduatedTrihedron myGTrihedronData;
|
Graphic3d_GraduatedTrihedron myGTrihedronData;
|
||||||
|
|
||||||
Handle(Graphic3d_LightSet) myNoShadingLight;
|
Handle(Graphic3d_LightSet) myNoShadingLight;
|
||||||
@@ -495,8 +486,6 @@ protected:
|
|||||||
OpenGl_GraduatedTrihedron myGraduatedTrihedron;
|
OpenGl_GraduatedTrihedron myGraduatedTrihedron;
|
||||||
OpenGl_FrameStatsPrs myFrameStatsPrs;
|
OpenGl_FrameStatsPrs myFrameStatsPrs;
|
||||||
|
|
||||||
Handle(OpenGl_TextureSet) myTextureEnv;
|
|
||||||
|
|
||||||
//! Framebuffers for OpenGL output.
|
//! Framebuffers for OpenGL output.
|
||||||
Handle(OpenGl_FrameBuffer) myOpenGlFBO;
|
Handle(OpenGl_FrameBuffer) myOpenGlFBO;
|
||||||
Handle(OpenGl_FrameBuffer) myOpenGlFBO2;
|
Handle(OpenGl_FrameBuffer) myOpenGlFBO2;
|
||||||
@@ -532,9 +521,8 @@ protected: //! @name Background parameters
|
|||||||
|
|
||||||
OpenGl_Aspects* myTextureParams; //!< Stores texture and its parameters for textured background
|
OpenGl_Aspects* myTextureParams; //!< Stores texture and its parameters for textured background
|
||||||
OpenGl_Aspects* myCubeMapParams; //!< Stores cubemap and its parameters for cubemap background
|
OpenGl_Aspects* myCubeMapParams; //!< Stores cubemap and its parameters for cubemap background
|
||||||
Handle(Graphic3d_CubeMap) myBackgroundCubeMap; //!< Cubemap has been set as background
|
|
||||||
Graphic3d_TypeOfBackground myBackgroundType; //!< Current type of background
|
|
||||||
OpenGl_BackgroundArray* myBackgrounds[Graphic3d_TypeOfBackground_NB]; //!< Array of primitive arrays of different background types
|
OpenGl_BackgroundArray* myBackgrounds[Graphic3d_TypeOfBackground_NB]; //!< Array of primitive arrays of different background types
|
||||||
|
Handle(OpenGl_TextureSet) myTextureEnv;
|
||||||
|
|
||||||
protected: //! @name methods related to PBR
|
protected: //! @name methods related to PBR
|
||||||
|
|
||||||
@@ -543,14 +531,7 @@ protected: //! @name methods related to PBR
|
|||||||
|
|
||||||
//! Generates IBL maps used in PBR pipeline.
|
//! Generates IBL maps used in PBR pipeline.
|
||||||
//! If background cubemap is not set clears all IBL maps.
|
//! If background cubemap is not set clears all IBL maps.
|
||||||
Standard_EXPORT void bakePBREnvironment (const Handle(OpenGl_Context)& theCtx);
|
Standard_EXPORT void updatePBREnvironment (const Handle(OpenGl_Context)& theCtx);
|
||||||
|
|
||||||
//! Fills all IBL maps with white color.
|
|
||||||
//! So that environment lighting is considered to be constant and is completely controls by ambient light sources.
|
|
||||||
Standard_EXPORT void clearPBREnvironment (const Handle(OpenGl_Context)& theCtx);
|
|
||||||
|
|
||||||
//! Process requests to generate or to clear PBR environment.
|
|
||||||
Standard_EXPORT void processPBREnvRequest (const Handle(OpenGl_Context)& theCtx);
|
|
||||||
|
|
||||||
protected: //! @name fields and types related to PBR
|
protected: //! @name fields and types related to PBR
|
||||||
|
|
||||||
@@ -562,17 +543,9 @@ protected: //! @name fields and types related to PBR
|
|||||||
OpenGl_PBREnvState_CREATED
|
OpenGl_PBREnvState_CREATED
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Type of action which can be done with PBR environment.
|
|
||||||
enum PBREnvironmentRequest
|
|
||||||
{
|
|
||||||
OpenGl_PBREnvRequest_NONE,
|
|
||||||
OpenGl_PBREnvRequest_BAKE,
|
|
||||||
OpenGl_PBREnvRequest_CLEAR
|
|
||||||
};
|
|
||||||
|
|
||||||
Handle(OpenGl_PBREnvironment) myPBREnvironment; //!< manager of IBL maps used in PBR pipeline
|
Handle(OpenGl_PBREnvironment) myPBREnvironment; //!< manager of IBL maps used in PBR pipeline
|
||||||
PBREnvironmentState myPBREnvState; //!< state of PBR environment
|
PBREnvironmentState myPBREnvState; //!< state of PBR environment
|
||||||
PBREnvironmentRequest myPBREnvRequest; //!< type of action is requested to be done with PBR environment
|
Standard_Boolean myPBREnvRequest; //!< update PBR environment
|
||||||
|
|
||||||
protected: //! @name data types related to ray-tracing
|
protected: //! @name data types related to ray-tracing
|
||||||
|
|
||||||
@@ -761,7 +734,7 @@ protected: //! @name data types related to ray-tracing
|
|||||||
//! Enables/disables depth-of-field effect (path tracing, perspective camera).
|
//! Enables/disables depth-of-field effect (path tracing, perspective camera).
|
||||||
Standard_Boolean DepthOfField;
|
Standard_Boolean DepthOfField;
|
||||||
|
|
||||||
//! Enables/disables cubemap backgraund.
|
//! Enables/disables cubemap background.
|
||||||
Standard_Boolean CubemapForBack;
|
Standard_Boolean CubemapForBack;
|
||||||
|
|
||||||
//! Tone mapping method for path tracing.
|
//! Tone mapping method for path tracing.
|
||||||
|
@@ -1422,7 +1422,7 @@ Standard_Boolean OpenGl_View::initRaytraceResources (const Standard_Integer theS
|
|||||||
}
|
}
|
||||||
myTileSampler.SetSize (myRenderParams, myRaytraceParameters.AdaptiveScreenSampling ? Graphic3d_Vec2i (theSizeX, theSizeY) : Graphic3d_Vec2i (0, 0));
|
myTileSampler.SetSize (myRenderParams, myRaytraceParameters.AdaptiveScreenSampling ? Graphic3d_Vec2i (theSizeX, theSizeY) : Graphic3d_Vec2i (0, 0));
|
||||||
|
|
||||||
const bool isCubemapForBack = !myBackgroundCubeMap.IsNull();
|
const bool isCubemapForBack = !myCubeMapBackground.IsNull();
|
||||||
if (myRaytraceParameters.CubemapForBack != isCubemapForBack)
|
if (myRaytraceParameters.CubemapForBack != isCubemapForBack)
|
||||||
{
|
{
|
||||||
myRaytraceParameters.CubemapForBack = isCubemapForBack;
|
myRaytraceParameters.CubemapForBack = isCubemapForBack;
|
||||||
@@ -2694,8 +2694,8 @@ Standard_Boolean OpenGl_View::setUniformState (const Standard_Integer the
|
|||||||
toDisableEnvironmentMap ? 0 : 1);
|
toDisableEnvironmentMap ? 0 : 1);
|
||||||
if (myRaytraceParameters.CubemapForBack)
|
if (myRaytraceParameters.CubemapForBack)
|
||||||
{
|
{
|
||||||
theProgram->SetUniform (theGlContext, "uZCoeff", myBackgroundCubeMap->ZIsInverted() ? -1 : 1);
|
theProgram->SetUniform (theGlContext, "uZCoeff", myCubeMapBackground->ZIsInverted() ? -1 : 1);
|
||||||
theProgram->SetUniform (theGlContext, "uYCoeff", myBackgroundCubeMap->IsTopDown() ? 1 : -1);
|
theProgram->SetUniform (theGlContext, "uYCoeff", myCubeMapBackground->IsTopDown() ? 1 : -1);
|
||||||
theProgram->SetUniform (theGlContext, myUniformLocations[theProgramId][OpenGl_RT_uEnvMapForBack],
|
theProgram->SetUniform (theGlContext, myUniformLocations[theProgramId][OpenGl_RT_uEnvMapForBack],
|
||||||
myBackgroundType == Graphic3d_TOB_CUBEMAP ? 1 : 0);
|
myBackgroundType == Graphic3d_TOB_CUBEMAP ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user