feat: add basic forward lighting coverage
This commit is contained in:
@@ -2,9 +2,12 @@
|
||||
|
||||
#include <XCEngine/Components/CameraComponent.h>
|
||||
#include <XCEngine/Components/GameObject.h>
|
||||
#include <XCEngine/Components/LightComponent.h>
|
||||
#include <XCEngine/Components/MeshFilterComponent.h>
|
||||
#include <XCEngine/Components/MeshRendererComponent.h>
|
||||
#include <XCEngine/Core/Asset/IResource.h>
|
||||
#include <XCEngine/Core/Math/Color.h>
|
||||
#include <XCEngine/Core/Math/Quaternion.h>
|
||||
#include <XCEngine/Core/Math/Vector3.h>
|
||||
#include <XCEngine/Rendering/RenderMaterialUtility.h>
|
||||
#include <XCEngine/Rendering/RenderSceneExtractor.h>
|
||||
@@ -137,6 +140,46 @@ TEST(RenderSceneExtractor_Test, OverrideCameraTakesPriority) {
|
||||
EXPECT_EQ(sceneData.cameraData.viewportHeight, 480u);
|
||||
}
|
||||
|
||||
TEST(RenderSceneExtractor_Test, ExtractsBrightestDirectionalLightAsMainLight) {
|
||||
Scene scene("LightingScene");
|
||||
|
||||
GameObject* cameraObject = scene.CreateGameObject("Camera");
|
||||
auto* camera = cameraObject->AddComponent<CameraComponent>();
|
||||
camera->SetPrimary(true);
|
||||
|
||||
GameObject* fillLightObject = scene.CreateGameObject("FillLight");
|
||||
auto* fillLight = fillLightObject->AddComponent<LightComponent>();
|
||||
fillLight->SetLightType(LightType::Directional);
|
||||
fillLight->SetColor(Color(0.2f, 0.4f, 0.8f, 1.0f));
|
||||
fillLight->SetIntensity(0.5f);
|
||||
|
||||
GameObject* pointLightObject = scene.CreateGameObject("PointLight");
|
||||
auto* pointLight = pointLightObject->AddComponent<LightComponent>();
|
||||
pointLight->SetLightType(LightType::Point);
|
||||
pointLight->SetIntensity(10.0f);
|
||||
|
||||
GameObject* mainLightObject = scene.CreateGameObject("MainLight");
|
||||
auto* mainLight = mainLightObject->AddComponent<LightComponent>();
|
||||
mainLight->SetLightType(LightType::Directional);
|
||||
mainLight->SetColor(Color(1.0f, 0.8f, 0.6f, 1.0f));
|
||||
mainLight->SetIntensity(2.5f);
|
||||
mainLightObject->GetTransform()->SetLocalRotation(
|
||||
Quaternion::LookRotation(Vector3(-0.3f, -1.0f, -0.2f).Normalized()));
|
||||
|
||||
RenderSceneExtractor extractor;
|
||||
const RenderSceneData sceneData = extractor.Extract(scene, nullptr, 800, 600);
|
||||
|
||||
ASSERT_TRUE(sceneData.HasCamera());
|
||||
ASSERT_TRUE(sceneData.lighting.HasMainDirectionalLight());
|
||||
EXPECT_FLOAT_EQ(sceneData.lighting.mainDirectionalLight.intensity, 2.5f);
|
||||
EXPECT_EQ(sceneData.lighting.mainDirectionalLight.color.r, 1.0f);
|
||||
EXPECT_EQ(sceneData.lighting.mainDirectionalLight.color.g, 0.8f);
|
||||
EXPECT_EQ(sceneData.lighting.mainDirectionalLight.color.b, 0.6f);
|
||||
EXPECT_EQ(
|
||||
sceneData.lighting.mainDirectionalLight.direction,
|
||||
mainLightObject->GetTransform()->GetForward().Normalized() * -1.0f);
|
||||
}
|
||||
|
||||
TEST(RenderSceneExtractor_Test, ExtractsSectionLevelVisibleItemsAndSortsByRenderQueue) {
|
||||
Scene scene("SectionScene");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user