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 ) {
62 mFarPlaneParameter->setValue( farPlane );
64 mNearPlaneParameter =
new Qt3DRender::QParameter( u
"nearPlane"_s, mMainCamera->nearPlane() );
65 mMaterial->addParameter( mNearPlaneParameter );
66 connect( mMainCamera, &Qt3DRender::QCamera::nearPlaneChanged, mNearPlaneParameter, [&](
float nearPlane ) {
67 mNearPlaneParameter->setValue( nearPlane );
70 mLightFarPlaneParameter =
new Qt3DRender::QParameter( u
"lightFarPlane"_s, mLightCamera->farPlane() );
71 mMaterial->addParameter( mLightFarPlaneParameter );
72 connect( mLightCamera, &Qt3DRender::QCamera::farPlaneChanged, mLightFarPlaneParameter, [&](
float farPlane ) {
73 mLightFarPlaneParameter->setValue( farPlane );
75 mLightNearPlaneParameter =
new Qt3DRender::QParameter( u
"lightNearPlane"_s, mLightCamera->nearPlane() );
76 mMaterial->addParameter( mLightNearPlaneParameter );
77 connect( mLightCamera, &Qt3DRender::QCamera::nearPlaneChanged, mLightNearPlaneParameter, [&](
float nearPlane ) {
78 mLightNearPlaneParameter->setValue( nearPlane );
81 mMainCameraInvViewMatrixParameter =
new Qt3DRender::QParameter( u
"invertedCameraView"_s, mMainCamera->viewMatrix().inverted() );
82 mMaterial->addParameter( mMainCameraInvViewMatrixParameter );
83 mMainCameraInvProjMatrixParameter =
new Qt3DRender::QParameter( u
"invertedCameraProj"_s, mMainCamera->projectionMatrix().inverted() );
84 mMaterial->addParameter( mMainCameraInvProjMatrixParameter );
85 connect( mMainCamera, &Qt3DRender::QCamera::projectionMatrixChanged, mMainCameraInvProjMatrixParameter, [&](
const QMatrix4x4 &projectionMatrix ) {
86 mMainCameraInvProjMatrixParameter->setValue( projectionMatrix.inverted() );
88 connect( mMainCamera, &Qt3DRender::QCamera::viewMatrixChanged, mMainCameraInvViewMatrixParameter, [&]() {
89 mMainCameraInvViewMatrixParameter->setValue( mMainCamera->viewMatrix().inverted() );
92 mShadowMinX =
new Qt3DRender::QParameter( u
"shadowMinX"_s, QVariant::fromValue( 0.0f ) );
93 mShadowMaxX =
new Qt3DRender::QParameter( u
"shadowMaxX"_s, QVariant::fromValue( 0.0f ) );
94 mShadowMinY =
new Qt3DRender::QParameter( u
"shadowMinY"_s, QVariant::fromValue( 0.0f ) );
95 mShadowMaxY =
new Qt3DRender::QParameter( u
"shadowMaxY"_s, QVariant::fromValue( 0.0f ) );
101 mRenderShadowsParameter =
new Qt3DRender::QParameter( u
"renderShadows"_s, QVariant::fromValue( 0 ) );
102 mMaterial->addParameter( mRenderShadowsParameter );
104 mShadowBiasParameter =
new Qt3DRender::QParameter( u
"shadowBias"_s, QVariant::fromValue( 0.00001f ) );
105 mMaterial->addParameter( mShadowBiasParameter );
107 mEyeDomeLightingEnabledParameter =
new Qt3DRender::QParameter( u
"edlEnabled"_s, QVariant::fromValue( 0 ) );
108 mEyeDomeLightingStrengthParameter =
new Qt3DRender::QParameter( u
"edlStrength"_s, QVariant::fromValue( 1000.0f ) );
109 mEyeDomeLightingDistanceParameter =
new Qt3DRender::QParameter( u
"edlDistance"_s, QVariant::fromValue( 2.0f ) );
110 mMaterial->addParameter( mEyeDomeLightingEnabledParameter );
111 mMaterial->addParameter( mEyeDomeLightingStrengthParameter );
112 mMaterial->addParameter( mEyeDomeLightingDistanceParameter );
114 mAmbientOcclusionEnabledParameter =
new Qt3DRender::QParameter( u
"ssaoEnabled"_s, QVariant::fromValue( 0 ) );
115 mMaterial->addParameter( mAmbientOcclusionEnabledParameter );
117 mLightPosition =
new Qt3DRender::QParameter( u
"lightPosition"_s, QVariant::fromValue( QVector3D() ) );
118 mLightDirection =
new Qt3DRender::QParameter( u
"lightDirection"_s, QVariant::fromValue( QVector3D() ) );
119 mMaterial->addParameter( mLightPosition );
120 mMaterial->addParameter( mLightDirection );
122 const QString vertexShaderPath = u
"qrc:/shaders/postprocess.vert"_s;
123 const QString fragmentShaderPath = u
"qrc:/shaders/postprocess.frag"_s;
125 mShader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( vertexShaderPath ) ) );
126 mShader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( fragmentShaderPath ) ) );
145 float minX, maxX, minY, maxY, minZ, maxZ;
146 QVector3D lookingAt = mMainCamera->viewCenter();
147 const float d = 2 * ( mMainCamera->position() - mMainCamera->viewCenter() ).length();
152 lookingAt = QVector3D( 0.5f * ( minX + maxX ), 0.5f * ( minY + maxY ), mMainCamera->viewCenter().z() );
153 const QVector3D lightPosition = lookingAt + QVector3D( 0.0f, 0.0f, d );
154 mLightCamera->setPosition( lightPosition );
155 mLightCamera->setViewCenter( lookingAt );
156 mLightCamera->setUpVector( QVector3D( 0.0f, 1.0f, 0.0f ) );
157 mLightCamera->rotateAboutViewCenter( QQuaternion::rotationTo( QVector3D( 0.0f, 0.0f, -1.0f ), lightDirection ) );
159 mLightCamera->setProjectionType( Qt3DRender::QCameraLens::ProjectionType::OrthographicProjection );
160 mLightCamera->lens()->setOrthographicProjection(
161 -0.7f * ( maxX - minX ), 0.7f * ( maxX - minX ),
162 -0.7f * ( maxY - minY ), 0.7f * ( maxY - minY ),
163 1.0f, 2 * ( lookingAt - lightPosition ).length()