// Copyright (C) 2020 Klaralvdalens Datakonsult AB (KDAB). // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #version 450 layout(location = 0) in vec3 vertexPosition; layout(location = 1) in vec3 vertexNormal; layout(location = 0) out vec4 positionInLightSpace; layout(location = 1) out vec3 position; layout(location = 2) out vec3 normal; layout(std140, binding = 0) uniform qt3d_render_view_uniforms { mat4 viewMatrix; mat4 projectionMatrix; mat4 viewProjectionMatrix; mat4 inverseViewMatrix; mat4 inverseProjectionMatrix; mat4 inverseViewProjectionMatrix; mat4 viewportMatrix; mat4 inverseViewportMatrix; vec4 textureTransformMatrix; vec3 eyePosition; float aspectRatio; float gamma; float exposure; float time; }; layout(std140, binding = 1) uniform qt3d_command_uniforms { mat4 modelMatrix; mat4 inverseModelMatrix; mat4 modelView; mat3 modelNormalMatrix; mat4 inverseModelViewMatrix; mat4 mvp; mat4 inverseModelViewProjectionMatrix; mat3 modelViewNormal; }; layout(std140, binding = 2) uniform qt3d_custom_uniforms { mat4 lightViewProjection; vec3 lightPosition; vec3 lightIntensity; vec3 ka; // Ambient reflectivity vec3 kd; // Diffuse reflectivity vec3 ks; // Specular reflectivity float shininess; // Specular shininess factor }; void main() { // positionInLightSpace = lightViewProjection * modelMatrix * vec4(vertexPosition, 1.0); const mat4 shadowMatrix = mat4(0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5, 0.5, 1.0); positionInLightSpace = shadowMatrix * lightViewProjection * modelMatrix * vec4(vertexPosition, 1.0); normal = normalize(modelViewNormal * vertexNormal); position = vec3(modelView * vec4(vertexPosition, 1.0)); gl_Position = mvp * vec4(vertexPosition, 1.0); }