58 mColorTextureParameter =
new Qt3DRender::QParameter( QStringLiteral(
"colorTexture" ), forwardRenderView.
colorTexture() );
59 mDepthTextureParameter =
new Qt3DRender::QParameter( QStringLiteral(
"depthTexture" ), forwardRenderView.
depthTexture() );
60 mShadowMapParameter =
new Qt3DRender::QParameter( QStringLiteral(
"shadowTexture" ), shadowRenderView.
mapTexture() );
61 mAmbientOcclusionTextureParameter =
new Qt3DRender::QParameter( QStringLiteral(
"ssaoTexture" ), aoRenderView.
blurredFactorMapTexture() );
62 mMaterial->addParameter( mColorTextureParameter );
63 mMaterial->addParameter( mDepthTextureParameter );
64 mMaterial->addParameter( mShadowMapParameter );
65 mMaterial->addParameter( mAmbientOcclusionTextureParameter );
70 mFarPlaneParameter =
new Qt3DRender::QParameter( QStringLiteral(
"farPlane" ), mMainCamera->farPlane() );
71 mMaterial->addParameter( mFarPlaneParameter );
72 connect( mMainCamera, &Qt3DRender::QCamera::farPlaneChanged, mFarPlaneParameter, [&](
float farPlane ) {
73 mFarPlaneParameter->setValue( farPlane );
75 mNearPlaneParameter =
new Qt3DRender::QParameter( QStringLiteral(
"nearPlane" ), mMainCamera->nearPlane() );
76 mMaterial->addParameter( mNearPlaneParameter );
77 connect( mMainCamera, &Qt3DRender::QCamera::nearPlaneChanged, mNearPlaneParameter, [&](
float nearPlane ) {
78 mNearPlaneParameter->setValue( nearPlane );
81 mLightFarPlaneParameter =
new Qt3DRender::QParameter( QStringLiteral(
"lightFarPlane" ), mLightCamera->farPlane() );
82 mMaterial->addParameter( mLightFarPlaneParameter );
83 connect( mLightCamera, &Qt3DRender::QCamera::farPlaneChanged, mLightFarPlaneParameter, [&](
float farPlane ) {
84 mLightFarPlaneParameter->setValue( farPlane );
86 mLightNearPlaneParameter =
new Qt3DRender::QParameter( QStringLiteral(
"lightNearPlane" ), mLightCamera->nearPlane() );
87 mMaterial->addParameter( mLightNearPlaneParameter );
88 connect( mLightCamera, &Qt3DRender::QCamera::nearPlaneChanged, mLightNearPlaneParameter, [&](
float nearPlane ) {
89 mLightNearPlaneParameter->setValue( nearPlane );
92 mMainCameraInvViewMatrixParameter =
new Qt3DRender::QParameter( QStringLiteral(
"invertedCameraView" ), mMainCamera->viewMatrix().inverted() );
93 mMaterial->addParameter( mMainCameraInvViewMatrixParameter );
94 mMainCameraInvProjMatrixParameter =
new Qt3DRender::QParameter( QStringLiteral(
"invertedCameraProj" ), mMainCamera->projectionMatrix().inverted() );
95 mMaterial->addParameter( mMainCameraInvProjMatrixParameter );
96 connect( mMainCamera, &Qt3DRender::QCamera::projectionMatrixChanged, mMainCameraInvProjMatrixParameter, [&](
const QMatrix4x4 &projectionMatrix ) {
97 mMainCameraInvProjMatrixParameter->setValue( projectionMatrix.inverted() );
99 connect( mMainCamera, &Qt3DRender::QCamera::viewMatrixChanged, mMainCameraInvViewMatrixParameter, [&]() {
100 mMainCameraInvViewMatrixParameter->setValue( mMainCamera->viewMatrix().inverted() );
103 mShadowMinX =
new Qt3DRender::QParameter( QStringLiteral(
"shadowMinX" ), QVariant::fromValue( 0.0f ) );
104 mShadowMaxX =
new Qt3DRender::QParameter( QStringLiteral(
"shadowMaxX" ), QVariant::fromValue( 0.0f ) );
105 mShadowMinY =
new Qt3DRender::QParameter( QStringLiteral(
"shadowMinY" ), QVariant::fromValue( 0.0f ) );
106 mShadowMaxY =
new Qt3DRender::QParameter( QStringLiteral(
"shadowMaxY" ), QVariant::fromValue( 0.0f ) );
112 mRenderShadowsParameter =
new Qt3DRender::QParameter( QStringLiteral(
"renderShadows" ), QVariant::fromValue( 0 ) );
113 mMaterial->addParameter( mRenderShadowsParameter );
115 mShadowBiasParameter =
new Qt3DRender::QParameter( QStringLiteral(
"shadowBias" ), QVariant::fromValue( 0.00001f ) );
116 mMaterial->addParameter( mShadowBiasParameter );
118 mEyeDomeLightingEnabledParameter =
new Qt3DRender::QParameter( QStringLiteral(
"edlEnabled" ), QVariant::fromValue( 0 ) );
119 mEyeDomeLightingStrengthParameter =
new Qt3DRender::QParameter( QStringLiteral(
"edlStrength" ), QVariant::fromValue( 1000.0f ) );
120 mEyeDomeLightingDistanceParameter =
new Qt3DRender::QParameter( QStringLiteral(
"edlDistance" ), QVariant::fromValue( 2.0f ) );
121 mMaterial->addParameter( mEyeDomeLightingEnabledParameter );
122 mMaterial->addParameter( mEyeDomeLightingStrengthParameter );
123 mMaterial->addParameter( mEyeDomeLightingDistanceParameter );
125 mAmbientOcclusionEnabledParameter =
new Qt3DRender::QParameter( QStringLiteral(
"ssaoEnabled" ), QVariant::fromValue( 0 ) );
126 mMaterial->addParameter( mAmbientOcclusionEnabledParameter );
128 mLightPosition =
new Qt3DRender::QParameter( QStringLiteral(
"lightPosition" ), QVariant::fromValue( QVector3D() ) );
129 mLightDirection =
new Qt3DRender::QParameter( QStringLiteral(
"lightDirection" ), QVariant::fromValue( QVector3D() ) );
130 mMaterial->addParameter( mLightPosition );
131 mMaterial->addParameter( mLightDirection );
133 const QString vertexShaderPath = QStringLiteral(
"qrc:/shaders/postprocess.vert" );
134 const QString fragmentShaderPath = QStringLiteral(
"qrc:/shaders/postprocess.frag" );
136 mShader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( vertexShaderPath ) ) );
137 mShader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( fragmentShaderPath ) ) );
156 float minX, maxX, minY, maxY, minZ, maxZ;
157 QVector3D lookingAt = mMainCamera->viewCenter();
158 const float d = 2 * ( mMainCamera->position() - mMainCamera->viewCenter() ).length();
163 lookingAt = QVector3D( 0.5f * ( minX + maxX ), 0.5f * ( minY + maxY ), mMainCamera->viewCenter().z() );
164 const QVector3D lightPosition = lookingAt + QVector3D( 0.0f, 0.0f, d );
165 mLightCamera->setPosition( lightPosition );
166 mLightCamera->setViewCenter( lookingAt );
167 mLightCamera->setUpVector( QVector3D( 0.0f, 1.0f, 0.0f ) );
168 mLightCamera->rotateAboutViewCenter( QQuaternion::rotationTo( QVector3D( 0.0f, 0.0f, -1.0f ), lightDirection ) );
170 mLightCamera->setProjectionType( Qt3DRender::QCameraLens::ProjectionType::OrthographicProjection );
171 mLightCamera->lens()->setOrthographicProjection(
172 -0.7f * ( maxX - minX ), 0.7f * ( maxX - minX ),
173 -0.7f * ( maxY - minY ), 0.7f * ( maxY - minY ),
174 1.0f, 2 * ( lookingAt - lightPosition ).length()