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