Skip to content

Commit f81921d

Browse files
committed
optimize
1 parent d79406b commit f81921d

File tree

4 files changed

+49
-54
lines changed

4 files changed

+49
-54
lines changed

Frame/Source/Assignment/Assignment3/main.cpp

Lines changed: 43 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Eigen::Matrix4f get_view_matrix(const Eigen::Vector3f &eye_pos)
2020
0,0,1,-eye_pos[2],
2121
0,0,0,1;
2222

23-
view = translate*view;
23+
view = translate * view;
2424

2525
return view;
2626
}
@@ -97,10 +97,8 @@ Eigen::Vector3f vertex_shader(const vertex_shader_payload& payload)
9797

9898
Eigen::Vector3f normal_fragment_shader(const fragment_shader_payload& payload)
9999
{
100-
Eigen::Vector3f return_color = (payload.normal.head<3>().normalized() + Eigen::Vector3f(1.0f, 1.0f, 1.0f)) / 2.f;
101-
Eigen::Vector3f result;
102-
result << return_color.x() * 255, return_color.y() * 255, return_color.z() * 255;
103-
return result;
100+
Eigen::Vector3f color = (payload.normal.head<3>().normalized() + Eigen::Vector3f{ 1.0f, 1.0f, 1.0f }) / 2.0f;
101+
return color * 255.0f;
104102
}
105103

106104
struct light
@@ -111,24 +109,24 @@ struct light
111109

112110
Eigen::Vector3f phong_fragment_shader(const fragment_shader_payload& payload)
113111
{
114-
static Eigen::Vector3f ka = Eigen::Vector3f(0.005f, 0.005f, 0.005f);
112+
Eigen::Vector3f ka{ 0.005f, 0.005f, 0.005f };
115113
Eigen::Vector3f kd = payload.color;
116-
static Eigen::Vector3f ks = Eigen::Vector3f(0.7937f, 0.7937f, 0.7937f);
114+
Eigen::Vector3f ks{ 0.7937f, 0.7937f, 0.7937f };
117115

118-
static std::vector<light> lights = {
119-
light{{20.0f, 20.0f, 20.0f}, {500.0f, 500.0f, 500.0f}},
120-
light{{-20.0f, 20.0f, 0.0f}, {500.0f, 500.0f, 500.0f}} };
116+
std::vector<light> lights = {
117+
light{{ 20.0f, 20.0f, 20.0f }, { 500.0f, 500.0f, 500.0f }},
118+
light{{ -20.0f, 20.0f, 0.0f }, { 500.0f, 500.0f, 500.0f }} };
121119

122-
static Eigen::Vector3f amb_light_intensity{5.0f, 5.0f, 5.0f };
123-
static Eigen::Vector3f eye_pos{0.0f, 0.0f, 10.0f };
120+
Eigen::Vector3f amb_light_intensity{ 5.0f, 5.0f, 5.0f };
121+
Eigen::Vector3f eye_pos{ 0.0f, 0.0f, 10.0f };
124122

125-
constexpr static float p = 150.0f;
123+
constexpr float p = 150.0f;
126124

127125
Eigen::Vector3f normal = payload.normal.normalized();
128126
Eigen::Vector3f point = payload.view_pos;
129127
Eigen::Vector3f viewDir = (eye_pos - point).normalized();
130128

131-
Eigen::Vector3f color = { 0.0f, 0.0f, 0.0f };
129+
Eigen::Vector3f color{ 0.0f, 0.0f, 0.0f };
132130

133131
for (auto& light : lights)
134132
{
@@ -152,30 +150,27 @@ Eigen::Vector3f phong_fragment_shader(const fragment_shader_payload& payload)
152150

153151
Eigen::Vector3f texture_fragment_shader(const fragment_shader_payload &payload)
154152
{
155-
// 好像 OpenCV 读取 png 时的返回值范围是 [0, 255],而非 [0, 1]
156-
static constexpr float reciprocal = 1.0f / 255.0f;
157-
158-
static Eigen::Vector3f ka = Eigen::Vector3f(0.005f, 0.005f, 0.005f);
153+
Eigen::Vector3f ka{ 0.005f, 0.005f, 0.005f };
159154
Eigen::Vector3f kd =
160155
payload.texture ?
161-
payload.texture->getColorBilinear(payload.tex_coords.x(), payload.tex_coords.y()) * reciprocal :
156+
payload.texture->getColorBilinear(payload.tex_coords.x(), payload.tex_coords.y()) / 255.0f :
162157
payload.color;
163-
static Eigen::Vector3f ks = Eigen::Vector3f(0.7937f, 0.7937f, 0.7937f);
158+
Eigen::Vector3f ks{ 0.7937f, 0.7937f, 0.7937f };
164159

165-
static std::vector<light> lights = {
166-
light{{20.0f, 20.0f, 20.0f}, {500.0f, 500.0f, 500.0f}},
167-
light{{-20.0f, 20.0f, 0.0f}, {500.0f, 500.0f, 500.0f}} };
160+
std::vector<light> lights = {
161+
light{{ 20.0f, 20.0f, 20.0f}, {500.0f, 500.0f, 500.0f }},
162+
light{{ -20.0f, 20.0f, 0.0f}, {500.0f, 500.0f, 500.0f }} };
168163

169-
static Eigen::Vector3f amb_light_intensity{ 5.0f, 5.0f, 5.0f };
170-
static Eigen::Vector3f eye_pos{ 0.0f, 0.0f, 10.0f };
164+
Eigen::Vector3f amb_light_intensity{ 5.0f, 5.0f, 5.0f };
165+
Eigen::Vector3f eye_pos{ 0.0f, 0.0f, 10.0f };
171166

172-
constexpr static float p = 150.0f;
167+
constexpr float p = 150.0f;
173168

174169
Eigen::Vector3f normal = payload.normal.normalized();
175170
Eigen::Vector3f point = payload.view_pos;
176171
Eigen::Vector3f viewDir = (eye_pos - point).normalized();
177172

178-
Eigen::Vector3f color = { 0.0f, 0.0f, 0.0f };
173+
Eigen::Vector3f color{ 0.0f, 0.0f, 0.0f };
179174

180175
for (auto &light : lights)
181176
{
@@ -199,8 +194,8 @@ Eigen::Vector3f texture_fragment_shader(const fragment_shader_payload &payload)
199194

200195
Eigen::Vector3f bump_fragment_shader(const fragment_shader_payload &payload)
201196
{
202-
constexpr static float kh = 0.2f;
203-
constexpr static float kn = 0.1f;
197+
constexpr float kh = 0.2f;
198+
constexpr float kn = 0.1f;
204199

205200
Eigen::Vector3f normal = payload.normal.normalized();
206201

@@ -232,28 +227,28 @@ Eigen::Vector3f bump_fragment_shader(const fragment_shader_payload &payload)
232227
float du = kh * kn * (height_u - height);
233228
float dv = kh * kn * (height_v - height);
234229

235-
Eigen::Vector3f localNormal = Eigen::Vector3f{ -du, -dv, 1.0f };
230+
Eigen::Vector3f localNormal{ -du, -dv, 1.0f };
236231
normal = (TBN * localNormal).normalized();
237232

238-
return normal * 255.f;
233+
return normal * 255.0f;
239234
}
240235

241236
Eigen::Vector3f displacement_fragment_shader(const fragment_shader_payload& payload)
242237
{
243-
static Eigen::Vector3f ka = Eigen::Vector3f(0.005f, 0.005f, 0.005f);
238+
Eigen::Vector3f ka = Eigen::Vector3f(0.005f, 0.005f, 0.005f);
244239
Eigen::Vector3f kd = payload.color;
245-
static Eigen::Vector3f ks = Eigen::Vector3f(0.7937f, 0.7937f, 0.7937f);
240+
Eigen::Vector3f ks = Eigen::Vector3f(0.7937f, 0.7937f, 0.7937f);
246241

247-
static std::vector<light> lights = {
248-
light{{20.0f, 20.0f, 20.0f}, {500.0f, 500.0f, 500.0f}},
249-
light{{-20.0f, 20.0f, 0.0f}, {500.0f, 500.0f, 500.0f}} };
242+
std::vector<light> lights = {
243+
light{{ 20.0f, 20.0f, 20.0f }, { 500.0f, 500.0f, 500.0f }},
244+
light{{ -20.0f, 20.0f, 0.0f }, { 500.0f, 500.0f, 500.0f }} };
250245

251-
static Eigen::Vector3f amb_light_intensity{ 5.0f, 5.0f, 5.0f };
252-
static Eigen::Vector3f eye_pos{ 0.0f, 0.0f, 10.0f };
246+
Eigen::Vector3f amb_light_intensity{ 5.0f, 5.0f, 5.0f };
247+
Eigen::Vector3f eye_pos{ 0.0f, 0.0f, 10.0f };
253248

254-
constexpr static float kh = 0.2f;
255-
constexpr static float kn = 0.1f;
256-
constexpr static float p = 150.0f;
249+
constexpr float kh = 0.2f;
250+
constexpr float kn = 0.1f;
251+
constexpr float p = 150.0f;
257252

258253
Eigen::Vector3f point = payload.view_pos;
259254
Eigen::Vector3f normal = payload.normal.normalized();
@@ -291,11 +286,11 @@ Eigen::Vector3f displacement_fragment_shader(const fragment_shader_payload& payl
291286
// 将着色点沿着原法线的方向进行位移
292287
point += kn * normal * height;
293288

294-
Eigen::Vector3f localNormal = Eigen::Vector3f{ -du, -dv, 1.0f };
289+
Eigen::Vector3f localNormal{ -du, -dv, 1.0f };
295290
normal = (TBN * localNormal).normalized();
296291
}
297292

298-
Eigen::Vector3f color = { 0.0f, 0.0f, 0.0f };
293+
Eigen::Vector3f color{ 0.0f, 0.0f, 0.0f };
299294

300295
for (auto &light : lights)
301296
{
@@ -316,7 +311,7 @@ Eigen::Vector3f displacement_fragment_shader(const fragment_shader_payload& payl
316311
color += (ambient + diffuse + specular);
317312
}
318313

319-
return color * 255.f;
314+
return color * 255.0f;
320315
}
321316

322317
int main()
@@ -326,10 +321,10 @@ int main()
326321
Loader.LoadFile(Utils::PathFromAsset("model/spot/spot_triangulated_good.obj"));
327322
for(auto &mesh : Loader.LoadedMeshes)
328323
{
329-
for(int i = 0; i < mesh.Vertices.size(); i += 3)
324+
for(size_t i = 0; i < mesh.Vertices.size(); i += 3)
330325
{
331326
Triangle* t = new Triangle();
332-
for(int j = 0; j < 3; ++j)
327+
for(size_t j = 0; j < 3; ++j)
333328
{
334329
t->setVertex(j, Vector4f(mesh.Vertices[i + j].Position.X, mesh.Vertices[i + j].Position.Y, mesh.Vertices[i + j].Position.Z, 1.0));
335330
t->setNormal(j, Vector3f(mesh.Vertices[i + j].Normal.X, mesh.Vertices[i + j].Normal.Y, mesh.Vertices[i + j].Normal.Z));
@@ -342,8 +337,8 @@ int main()
342337
int key = 0;
343338
int frame_count = 0;
344339
float angle = 140.0f;
345-
rst::rasterizer r(700, 700);
346-
Eigen::Vector3f eye_pos = { 0.0f,0.0f,10.0f };
340+
rst::rasterizer r{ 700, 700 };
341+
Eigen::Vector3f eye_pos{ 0.0f,0.0f,10.0f };
347342

348343
// normal_fragment_shader
349344
// phong_fragment_shader

Frame/Source/Assignment/Assignment6/BVH.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ BVHBuildNode* BVHAccel::recursiveBuild(std::vector<Object*> objects)
9797
#define ENABLE_SAH 1
9898

9999
#if ENABLE_SAH
100-
101100
// 一份比较清晰的 SAH 介绍:https://zhuanlan.zhihu.com/p/50720158
102101

103102
// 划分方式的总数。
@@ -141,12 +140,9 @@ BVHBuildNode* BVHAccel::recursiveBuild(std::vector<Object*> objects)
141140
}
142141

143142
const auto &target = objects.begin() + (objects.size() * minCostIndex * SlashCountInv);
144-
145143
#else // ENABLE_SAH
146-
147144
// 基本的 BVH 划分方式,按数量从中间一分为二。
148145
const auto &target = objects.begin() + (objects.size() / 2);
149-
150146
#endif // ENABLE_SAH
151147

152148
auto leftObjects = std::vector<Object *>(begin, target);

Frame/Source/Assignment/Assignment7/Material.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,6 @@ Vector3f Material::eval(const Vector3f &wi, const Vector3f &wo, const Vector3f &
215215
Vector3f diffuseBRDF = m_albedo * MY_INV_PI;
216216

217217
return KD * diffuseBRDF + specularBRDF;
218-
219218
break;
220219
}
221220
case MaterialType::MIRROR:
@@ -224,5 +223,10 @@ Vector3f Material::eval(const Vector3f &wi, const Vector3f &wo, const Vector3f &
224223
return Vector3f{ 1.0f , 1.0f , 1.0f };
225224
break;
226225
}
226+
default:
227+
{
228+
return Vector3f{ 0.0f, 0.0f, 0.0f };
229+
break;
230+
}
227231
}
228232
}

Frame/Source/Assignment/Assignment7/Scene.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ Vector3f Scene::castRay(const Ray &ray, uint32_t depth) const
8989
float distanceToLight = (positionLight - position).norm();
9090
float distanceToInter = intersect(Ray{ position, lightDir }).distance;
9191

92-
// 这里有点抽象,EPSILON 大概取 0.00001f 结果就会出现黑条纹,原理未知。
92+
// EPSILON 大概取 0.00001f 结果就会出现黑条纹,原理未知。
9393
if (Utils::FloatEqual(distanceToInter, distanceToLight, 0.0001f))
9494
{
9595
// 着色点与光源之间无阻挡。

0 commit comments

Comments
 (0)