47 mColorTextureParameter =
new Qt3DRender::QParameter( u
"colorTexture"_s, forwardRenderView.
colorTexture() );
48 mDepthTextureParameter =
new Qt3DRender::QParameter( u
"depthTexture"_s, forwardRenderView.
depthTexture() );
49 mShadowMapParameter =
new Qt3DRender::QParameter( u
"shadowTexture"_s, shadowRenderView.
mapTexture() );
50 mAmbientOcclusionTextureParameter =
new Qt3DRender::QParameter( u
"ssaoTexture"_s, aoRenderView.
blurredFactorMapTexture() );
51 mMaterial->addParameter( mColorTextureParameter );
52 mMaterial->addParameter( mDepthTextureParameter );
53 mMaterial->addParameter( mShadowMapParameter );
54 mMaterial->addParameter( mAmbientOcclusionTextureParameter );
59 mFarPlaneParameter =
new Qt3DRender::QParameter( u
"farPlane"_s, mMainCamera->farPlane() );
60 mMaterial->addParameter( mFarPlaneParameter );
61 connect( mMainCamera, &Qt3DRender::QCamera::farPlaneChanged, mFarPlaneParameter, [&](
float farPlane ) { mFarPlaneParameter->setValue( farPlane ); } );
62 mNearPlaneParameter =
new Qt3DRender::QParameter( u
"nearPlane"_s, mMainCamera->nearPlane() );
63 mMaterial->addParameter( mNearPlaneParameter );
64 connect( mMainCamera, &Qt3DRender::QCamera::nearPlaneChanged, mNearPlaneParameter, [&](
float nearPlane ) { mNearPlaneParameter->setValue( nearPlane ); } );
66 mLightFarPlaneParameter =
new Qt3DRender::QParameter( u
"lightFarPlane"_s, mLightCamera->farPlane() );
67 mMaterial->addParameter( mLightFarPlaneParameter );
68 connect( mLightCamera, &Qt3DRender::QCamera::farPlaneChanged, mLightFarPlaneParameter, [&](
float farPlane ) { mLightFarPlaneParameter->setValue( farPlane ); } );
69 mLightNearPlaneParameter =
new Qt3DRender::QParameter( u
"lightNearPlane"_s, mLightCamera->nearPlane() );
70 mMaterial->addParameter( mLightNearPlaneParameter );
71 connect( mLightCamera, &Qt3DRender::QCamera::nearPlaneChanged, mLightNearPlaneParameter, [&](
float nearPlane ) { mLightNearPlaneParameter->setValue( nearPlane ); } );
73 mMainCameraInvViewMatrixParameter =
new Qt3DRender::QParameter( u
"invertedCameraView"_s, mMainCamera->viewMatrix().inverted() );
74 mMaterial->addParameter( mMainCameraInvViewMatrixParameter );
75 mMainCameraInvProjMatrixParameter =
new Qt3DRender::QParameter( u
"invertedCameraProj"_s, mMainCamera->projectionMatrix().inverted() );
76 mMaterial->addParameter( mMainCameraInvProjMatrixParameter );
77 connect( mMainCamera, &Qt3DRender::QCamera::projectionMatrixChanged, mMainCameraInvProjMatrixParameter, [&](
const QMatrix4x4 &projectionMatrix ) {
78 mMainCameraInvProjMatrixParameter->setValue( projectionMatrix.inverted() );
80 connect( mMainCamera, &Qt3DRender::QCamera::viewMatrixChanged, mMainCameraInvViewMatrixParameter, [&]() { mMainCameraInvViewMatrixParameter->setValue( mMainCamera->viewMatrix().inverted() ); } );
82 mShadowMinX =
new Qt3DRender::QParameter( u
"shadowMinX"_s, QVariant::fromValue( 0.0f ) );
83 mShadowMaxX =
new Qt3DRender::QParameter( u
"shadowMaxX"_s, QVariant::fromValue( 0.0f ) );
84 mShadowMinY =
new Qt3DRender::QParameter( u
"shadowMinY"_s, QVariant::fromValue( 0.0f ) );
85 mShadowMaxY =
new Qt3DRender::QParameter( u
"shadowMaxY"_s, QVariant::fromValue( 0.0f ) );
91 mRenderShadowsParameter =
new Qt3DRender::QParameter( u
"renderShadows"_s, QVariant::fromValue( 0 ) );
92 mMaterial->addParameter( mRenderShadowsParameter );
94 mShadowBiasParameter =
new Qt3DRender::QParameter( u
"shadowBias"_s, QVariant::fromValue( 0.00001f ) );
95 mMaterial->addParameter( mShadowBiasParameter );
97 mEyeDomeLightingEnabledParameter =
new Qt3DRender::QParameter( u
"edlEnabled"_s, QVariant::fromValue( 0 ) );
98 mEyeDomeLightingStrengthParameter =
new Qt3DRender::QParameter( u
"edlStrength"_s, QVariant::fromValue( 1000.0f ) );
99 mEyeDomeLightingDistanceParameter =
new Qt3DRender::QParameter( u
"edlDistance"_s, QVariant::fromValue( 2.0f ) );
100 mMaterial->addParameter( mEyeDomeLightingEnabledParameter );
101 mMaterial->addParameter( mEyeDomeLightingStrengthParameter );
102 mMaterial->addParameter( mEyeDomeLightingDistanceParameter );
104 mAmbientOcclusionEnabledParameter =
new Qt3DRender::QParameter( u
"ssaoEnabled"_s, QVariant::fromValue( 0 ) );
105 mMaterial->addParameter( mAmbientOcclusionEnabledParameter );
107 mLightPosition =
new Qt3DRender::QParameter( u
"lightPosition"_s, QVariant::fromValue( QVector3D() ) );
108 mLightDirection =
new Qt3DRender::QParameter( u
"lightDirection"_s, QVariant::fromValue( QVector3D() ) );
109 mMaterial->addParameter( mLightPosition );
110 mMaterial->addParameter( mLightDirection );
112 const QString vertexShaderPath = u
"qrc:/shaders/postprocess.vert"_s;
113 const QString fragmentShaderPath = u
"qrc:/shaders/postprocess.frag"_s;
115 mShader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( vertexShaderPath ) ) );
116 mShader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( fragmentShaderPath ) ) );
135 float minX, maxX, minY, maxY, minZ, maxZ;
136 QVector3D lookingAt = mMainCamera->viewCenter();
137 const float d = 2 * ( mMainCamera->position() - mMainCamera->viewCenter() ).length();
142 lookingAt = QVector3D( 0.5f * ( minX + maxX ), 0.5f * ( minY + maxY ), mMainCamera->viewCenter().z() );
143 const QVector3D lightPosition = lookingAt + QVector3D( 0.0f, 0.0f, d );
144 mLightCamera->setPosition( lightPosition );
145 mLightCamera->setViewCenter( lookingAt );
146 mLightCamera->setUpVector( QVector3D( 0.0f, 1.0f, 0.0f ) );
147 mLightCamera->rotateAboutViewCenter( QQuaternion::rotationTo( QVector3D( 0.0f, 0.0f, -1.0f ), lightDirection ) );
149 mLightCamera->setProjectionType( Qt3DRender::QCameraLens::ProjectionType::OrthographicProjection );
151 mLightCamera->lens()->setOrthographicProjection(
152 -0.7f * ( maxX - minX ), 0.7f * ( maxX - minX ),
153 -0.7f * ( maxY - minY ), 0.7f * ( maxY - minY ),
154 1.0f, 2 * ( lookingAt - lightPosition ).length()