Skip to content

Commit e66aadd

Browse files
committed
Adjusted all scenes a bit.
Signed-off-by: [email protected] <[email protected]>
1 parent 1acec48 commit e66aadd

6 files changed

+69
-89
lines changed

Source/Scene/Scenes/DragonScene.cpp

+60-76
Original file line numberDiff line numberDiff line change
@@ -6,121 +6,105 @@
66
#include <gtx/rotate_vector.hpp>
77

88
#include "../../Graphic/Lighting/PointLight.h"
9+
#include "../../Graphic/Camera/Camera.h"
10+
#include "../../Graphic/Camera/PerspectiveCamera.h"
911
#include "../../Time/Time.h"
1012
#include "../../Utility/ObjLoader.h"
1113
#include "../../Graphic/Renderer/MeshRenderer.h"
1214
#include "../../Graphic/Material/MaterialSetting.h"
15+
#include "../../Application.h"
1316

14-
namespace {
15-
constexpr float UTAH_TEAPOT_SIZE = 1.0f; // 18.0f;
16-
unsigned int teapotIndex = 0;
17-
unsigned int lightCubeIndex = 0;
18-
}
17+
namespace { MeshRenderer * lampRenderer; }
1918

2019
void DragonScene::init(unsigned int viewportWidth, unsigned int viewportHeight) {
2120
FirstPersonScene::init(viewportWidth, viewportHeight);
2221

2322
// Cornell box.
2423
Shape * cornell = ObjLoader::loadObjFile("Assets\\Models\\cornell.obj");
2524
shapes.push_back(cornell);
26-
for (unsigned int i = 0; i < cornell->meshes.size(); ++i) {
27-
renderers.push_back(new MeshRenderer(&(cornell->meshes[i])));
28-
}
25+
for (unsigned int i = 0; i < cornell->meshes.size(); ++i) renderers.push_back(new MeshRenderer(&(cornell->meshes[i])));
2926
for (auto & r : renderers) {
3027
r->transform.position -= glm::vec3(0.00f, 0.0f, 0);
3128
r->transform.scale = glm::vec3(0.995f);
3229
r->transform.updateTransformMatrix();
3330
}
34-
teapotIndex = renderers.size();
35-
36-
// Dragon.
37-
Shape * dragon = ObjLoader::loadObjFile("Assets\\Models\\dragon.obj");
38-
shapes.push_back(dragon);
39-
for (unsigned int i = 0; i < dragon->meshes.size(); ++i) {
40-
renderers.push_back(new MeshRenderer(&(dragon->meshes[i])));
41-
}
42-
lightCubeIndex = renderers.size();
43-
44-
// Light cube.
45-
Shape * lightCube = ObjLoader::loadObjFile("Assets\\Models\\sphere.obj");
46-
shapes.push_back(lightCube);
47-
for (unsigned int i = 0; i < lightCube->meshes.size(); ++i) {
48-
renderers.push_back(new MeshRenderer(&(lightCube->meshes[i])));
49-
}
50-
51-
/*
52-
Shape * sponza = ObjLoader::loadObjFile("Assets\\Models\\sponza.obj");
53-
shapes.push_back(sponza);
54-
for (unsigned int i = 0; i < sponza->meshes.size(); ++i) {
55-
renderers.push_back(new MeshRenderer(&(sponza->meshes[i])));
56-
}
57-
*/
5831

59-
// Cornell box.
6032
renderers[0]->materialSetting = MaterialSetting::Red(); // Green wall.
6133
renderers[1]->materialSetting = MaterialSetting::White(); // Floor.
6234
renderers[2]->materialSetting = MaterialSetting::White(); // Roof.
6335
renderers[3]->materialSetting = MaterialSetting::Blue(); // Red wall.
64-
renderers[3]->tweakable = true;
6536
renderers[4]->materialSetting = MaterialSetting::White(); // White wall.
6637
renderers[5]->materialSetting = MaterialSetting::White(); // Left box.
6738
renderers[6]->materialSetting = MaterialSetting::White(); // Right box.
6839
renderers[5]->enabled = false; // Disable boxes.
6940
renderers[6]->enabled = false; // Disable boxes.
7041

7142
// Dragon.
72-
renderers[teapotIndex]->materialSetting = MaterialSetting::White();
73-
renderers[teapotIndex]->materialSetting->specularColor = glm::vec3(1.0, 0.9, 0.15);
74-
renderers[teapotIndex]->materialSetting->diffuseColor = renderers[teapotIndex]->materialSetting->specularColor;
75-
renderers[teapotIndex]->materialSetting->emissivity = 0.0f;
76-
renderers[teapotIndex]->materialSetting->specularReflectivity = 1.0;
77-
renderers[teapotIndex]->materialSetting->diffuseReflectivity = 0.0;
78-
renderers[teapotIndex]->materialSetting->specularDiffusion = 4.5;
79-
renderers[teapotIndex]->tweakable = true;
80-
81-
// Dragon pot.
82-
for (unsigned int i = teapotIndex; i < renderers.size(); ++i) {
83-
auto & r = renderers[i];
84-
r->transform.scale = glm::vec3(1.5f);
85-
r->transform.rotation = glm::vec3(0, 1.0, 0);
86-
r->transform.position = glm::vec3(0, -0.3, 0);
87-
r->transform.updateTransformMatrix();
43+
int dragonIndex = renderers.size();
44+
Shape * dragon = ObjLoader::loadObjFile("Assets\\Models\\dragon.obj");
45+
shapes.push_back(dragon);
46+
for (unsigned int i = 0; i < dragon->meshes.size(); ++i) {
47+
renderers.push_back(new MeshRenderer(&(dragon->meshes[i])));
8848
}
89-
90-
// Light cube.
91-
renderers[lightCubeIndex]->materialSetting = MaterialSetting::Emissive();
92-
renderers[lightCubeIndex]->materialSetting->diffuseColor.r = 1.0f;
93-
renderers[lightCubeIndex]->materialSetting->diffuseColor.g = 1.0f;
94-
renderers[lightCubeIndex]->materialSetting->diffuseColor.b = 1.0f;
95-
renderers[lightCubeIndex]->materialSetting->emissivity = 2.0f;
96-
renderers[lightCubeIndex]->materialSetting->specularReflectivity = 0.0f;
97-
renderers[lightCubeIndex]->materialSetting->diffuseReflectivity = 0.0f;
98-
99-
// Lighting.
49+
auto * dragonRenderer = renderers[dragonIndex];
50+
dragonRenderer->transform.scale = glm::vec3(1.79f);
51+
dragonRenderer->transform.rotation = glm::vec3(0, 2.0, 0);
52+
dragonRenderer->transform.position = glm::vec3(-0.09f, -0.50f, 0.01f);
53+
dragonRenderer->transform.updateTransformMatrix();
54+
dragonRenderer->tweakable = true;
55+
dragonRenderer->name = "Dragon";
56+
dragonRenderer->materialSetting = MaterialSetting::White();
57+
58+
auto * dragonMaterialSetting = dragonRenderer->materialSetting;
59+
dragonMaterialSetting->specularColor = glm::vec3(0.95, 1, 0.95);
60+
dragonMaterialSetting->diffuseColor = dragonMaterialSetting->specularColor;
61+
dragonMaterialSetting->emissivity = 0.00f;
62+
dragonMaterialSetting->transparency = 0.00f;
63+
dragonMaterialSetting->refractiveIndex = 1.18f;
64+
dragonMaterialSetting->specularReflectivity = 1.00f;
65+
dragonMaterialSetting->diffuseReflectivity = 0.0f;
66+
dragonMaterialSetting->specularDiffusion = 2.0f;
67+
68+
// Light.
69+
Shape * light = ObjLoader::loadObjFile("Assets\\Models\\quad.obj");
70+
shapes.push_back(light);
71+
lampRenderer = new MeshRenderer(&(light->meshes[0]));
72+
renderers.push_back(lampRenderer);
73+
74+
lampRenderer->materialSetting = MaterialSetting::Emissive();
75+
lampRenderer->materialSetting->diffuseColor.r = 1.f;
76+
lampRenderer->materialSetting->diffuseColor.g = 1.f;
77+
lampRenderer->materialSetting->diffuseColor.b = 1.f;
78+
lampRenderer->materialSetting->emissivity = 1.0f;
79+
lampRenderer->materialSetting->specularReflectivity = 0.0f;
80+
lampRenderer->materialSetting->diffuseReflectivity = 1.0f;
81+
82+
lampRenderer->transform.position = glm::vec3(0, 0.975, 0);
83+
lampRenderer->transform.rotation = glm::vec3(-3.1414 * 0.5, 3.1414 * 0.5, 0);
84+
lampRenderer->transform.scale = glm::vec3(0.14f, 0.34f, 1.0f);
85+
lampRenderer->transform.updateTransformMatrix();
86+
lampRenderer->name = "Ceiling lamp";
87+
88+
// Point light.
10089
PointLight p;
101-
p.color = glm::vec3(0.75f, 0.1f, 0.1f);
90+
p.color = glm::vec3(0.5);
91+
p.position = lampRenderer->transform.position - glm::vec3(0, 0.2, 0);
10292
pointLights.push_back(p);
103-
pointLights[0].color = glm::vec3(1.4f, 0.9f, 0.35f);
104-
pointLights[0].color = normalize(pointLights[0].color);
10593
}
10694

10795
void DragonScene::update() {
10896
FirstPersonScene::update();
10997

110-
glm::vec3 r = glm::vec3(sinf(float(Time::time * 0.97)), sinf(float(Time::time * 0.45)), sinf(float(Time::time * 0.32)));
111-
112-
// Lighting.
113-
renderers[lightCubeIndex]->transform.position = glm::vec3(0, 0.5, 0) + r * 0.1f;
114-
renderers[lightCubeIndex]->transform.position.x *= 4.5f;
115-
renderers[lightCubeIndex]->transform.position.z *= 4.5f;
116-
renderers[lightCubeIndex]->transform.rotation = r;
117-
renderers[lightCubeIndex]->transform.scale = glm::vec3(0.049f);
118-
renderers[lightCubeIndex]->transform.updateTransformMatrix();
119-
pointLights[0].position = renderers[lightCubeIndex]->transform.position;
120-
renderers[lightCubeIndex]->materialSetting->diffuseColor = pointLights[0].color;
98+
glm::vec3 col = pointLights[0].color;
99+
float m = col.r;
100+
m = glm::max(m, col.b);
101+
m = glm::max(m, col.g);
102+
103+
lampRenderer->materialSetting->diffuseColor = col /= m;
104+
lampRenderer->materialSetting->emissivity = 2 * m;
121105
}
122106

123107
DragonScene::~DragonScene() {
124-
for (auto * r : renderers) delete r;
125108
for (auto * s : shapes) delete s;
109+
for (auto * r : renderers) delete r;
126110
}

Source/Scene/Scenes/DragonScene.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
#include <vector>
44

5+
#include "../Scene.h"
56
#include "../Templates/FirstPersonScene.h"
67

78
class Shape;
89

9-
/// <summary> A scene with a dragon and a lamp in the ceiling. </summary>
10+
/// <summary> A scene with a specular dragon and a ceiling lamp. </summary>
1011
class DragonScene : public FirstPersonScene {
1112
public:
1213
void update() override;

Source/Scene/Scenes/GlassScene.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,10 @@ void GlassScene::init(unsigned int viewportWidth, unsigned int viewportHeight) {
5252
renderers[6]->materialSetting = MaterialSetting::White(); // Right box.
5353
renderers[6]->enabled = false;
5454

55+
56+
// Buddha.
5557
int buddhaIndex = renderers.size();
56-
Shape * buddha = ObjLoader::loadObjFile("Assets\\Models\\dragon.obj");
58+
Shape * buddha = ObjLoader::loadObjFile("Assets\\Models\\buddha.obj");
5759
shapes.push_back(buddha);
5860
for (unsigned int i = 0; i < buddha->meshes.size(); ++i) {
5961
renderers.push_back(new MeshRenderer(&(buddha->meshes[i])));
@@ -85,6 +87,7 @@ void GlassScene::init(unsigned int viewportWidth, unsigned int viewportHeight) {
8587
renderers[lightCubeIndex]->materialSetting->specularReflectivity = 0.0f;
8688
renderers[lightCubeIndex]->materialSetting->diffuseReflectivity = 0.0f;
8789

90+
// An additional wall (behind the camera).
8891
int backWallIndex = renderers.size();
8992
Shape * backWall = ObjLoader::loadObjFile("Assets\\Models\\quadn.obj");
9093
shapes.push_back(backWall);

Source/Scene/Scenes/MultipleObjectsScene.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ void MultipleObjectsScene::init(unsigned int viewportWidth, unsigned int viewpor
5858
objectMaterialSetting->specularReflectivity = 1.0f;
5959
objectMaterialSetting->diffuseReflectivity = 0.0f;
6060
objectMaterialSetting->specularDiffusion = 3.2f;
61-
objectMaterialSetting->transparency = 0.9f;
61+
objectMaterialSetting->transparency = 1.0f;
6262
objectRenderer->tweakable = true;
6363
objectRenderer->transform.scale = glm::vec3(0.23f);
6464
objectRenderer->transform.rotation = glm::vec3(0.00, 0.30, 0.00);

voxel-cone-tracing.vcxproj

+2-4
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
<AdditionalOptions>/NODEFAULTLIB:libcmt.lib %(AdditionalOptions)</AdditionalOptions>
107107
</Link>
108108
<PostBuildEvent>
109-
<Command>copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"</Command>
109+
<Command>copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"</Command>
110110
</PostBuildEvent>
111111
</ItemDefinitionGroup>
112112
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -187,7 +187,6 @@
187187
<ClInclude Include="Source\Scene\Scene.h" />
188188
<ClInclude Include="Source\Scene\ScenePack.h" />
189189
<ClInclude Include="Source\Scene\Scenes\GlassScene.h" />
190-
<ClInclude Include="Source\Scene\Scenes\TransparencyScene.h" />
191190
<ClInclude Include="Source\Scene\Scenes\CornellScene.h" />
192191
<ClInclude Include="Source\Scene\Scenes\DragonScene.h" />
193192
<ClInclude Include="Source\Scene\Scenes\MultipleObjectsScene.h" />
@@ -217,7 +216,6 @@
217216
<ClCompile Include="Source\Graphic\Texture2D.cpp" />
218217
<ClCompile Include="Source\Graphic\Texture3D.cpp" />
219218
<ClCompile Include="Source\Scene\Scenes\GlassScene.cpp" />
220-
<ClCompile Include="Source\Scene\Scenes\TransparencyScene.cpp" />
221219
<ClCompile Include="Source\Scene\Scenes\CornellScene.cpp" />
222220
<ClCompile Include="Source\Scene\Scenes\DragonScene.cpp" />
223221
<ClCompile Include="Source\Scene\Scenes\MultipleObjectsScene.cpp" />
@@ -236,4 +234,4 @@
236234
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
237235
<ImportGroup Label="ExtensionTargets">
238236
</ImportGroup>
239-
</Project>
237+
</Project>

voxel-cone-tracing.vcxproj.filters

-6
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,6 @@
102102
<ClInclude Include="Source\Scene\ScenePack.h">
103103
<Filter>Header Files</Filter>
104104
</ClInclude>
105-
<ClInclude Include="Source\Scene\Scenes\TransparencyScene.h">
106-
<Filter>Header Files</Filter>
107-
</ClInclude>
108105
<ClInclude Include="Source\Scene\Scenes\MultipleObjectsScene.h">
109106
<Filter>Header Files</Filter>
110107
</ClInclude>
@@ -182,9 +179,6 @@
182179
<ClCompile Include="Source\Scene\Templates\FirstPersonScene.h">
183180
<Filter>Source Files</Filter>
184181
</ClCompile>
185-
<ClCompile Include="Source\Scene\Scenes\TransparencyScene.cpp">
186-
<Filter>Source Files</Filter>
187-
</ClCompile>
188182
<ClCompile Include="Source\Scene\Scenes\MultipleObjectsScene.cpp">
189183
<Filter>Source Files</Filter>
190184
</ClCompile>

0 commit comments

Comments
 (0)