diff --git a/examples/DeferredShading/main.cpp b/examples/DeferredShading/main.cpp index e6ed3e23f..08d7636f4 100644 --- a/examples/DeferredShading/main.cpp +++ b/examples/DeferredShading/main.cpp @@ -296,7 +296,7 @@ int main() std::uniform_real_distribution heightDis(1.5f, 1.95f); std::uniform_real_distribution posDis(-10.f, 10.f); std::uniform_real_distribution dirDis(-1.f, 1.f); - std::uniform_real_distribution dirYDis(0.f, 0.75f); + std::uniform_real_distribution dirYDis(0.0f, 0.33f); std::uniform_real_distribution radiusDis(1.f, 5.f); for (std::size_t i = 0; i < 1000; ++i) @@ -779,12 +779,17 @@ int main() { auto& lightDataAllocation = uploadPool.Allocate(alignedSpotLightSize * spotLights.size()); Nz::UInt8* lightDataPtr = static_cast(lightDataAllocation.mappedPtr); + for (const SpotLight& spotLight : spotLights) { - Nz::Vector3f direction = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, elapsedTime * 90.f, 0.f)) * spotLight.direction; + float rotationSpeed = spotLight.position.GetLength() / 10.f; + + Nz::Vector3f position = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, elapsedTime * 45.f * rotationSpeed, 0.f)) * spotLight.position; + Nz::Vector3f direction = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, elapsedTime * 90.f * rotationSpeed, 0.f)) * spotLight.direction; + Nz::AccessByOffset(lightDataPtr, colorOffset) = Nz::Vector3f(spotLight.color.r / 255.f, spotLight.color.g / 255.f, spotLight.color.b / 255.f); - Nz::AccessByOffset(lightDataPtr, positionOffset) = spotLight.position; + Nz::AccessByOffset(lightDataPtr, positionOffset) = position; Nz::AccessByOffset(lightDataPtr, directionOffset) = direction; Nz::AccessByOffset(lightDataPtr, radiusOffset) = spotLight.radius; Nz::AccessByOffset(lightDataPtr, invRadiusOffset) = 1.f / spotLight.radius; @@ -792,7 +797,7 @@ int main() Nz::AccessByOffset(lightDataPtr, outerAngleOffset) = spotLight.outerAngle.GetCos(); float baseRadius = spotLight.radius * spotLight.outerAngle.GetTan() * 1.1f; - Nz::Matrix4f transformMatrix = Nz::Matrix4f::Transform(spotLight.position, Nz::Quaternionf::RotationBetween(Nz::Vector3f::Forward(), direction), Nz::Vector3f(baseRadius, baseRadius, spotLight.radius)); + Nz::Matrix4f transformMatrix = Nz::Matrix4f::Transform(position, Nz::Quaternionf::RotationBetween(Nz::Vector3f::Forward(), direction), Nz::Vector3f(baseRadius, baseRadius, spotLight.radius)); Nz::AccessByOffset(lightDataPtr, transformMatrixOffset) = transformMatrix; lightDataPtr += alignedSpotLightSize;