Ensure intensity is clamped
This commit is contained in:
parent
d750c49f71
commit
b57ec11598
@ -1,6 +1,7 @@
|
|||||||
#include "render.h"
|
#include "render.h"
|
||||||
#include "aliases.h"
|
#include "aliases.h"
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
|
#include "img.h"
|
||||||
#include "shader.h"
|
#include "shader.h"
|
||||||
#include "typed_list.h"
|
#include "typed_list.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
@ -154,10 +154,14 @@ internal FragmentResult diffuse_shader_fragment(void *shader,
|
|||||||
output = *colour;
|
output = *colour;
|
||||||
}
|
}
|
||||||
|
|
||||||
f32 intensity = max(0.0f, dot_v3(normal, shdr->light_dir));
|
f32 intensity = max(0.001f, dot_v3(normal, shdr->light_dir));
|
||||||
output.r *= intensity + g_ambient_light.r;
|
f32 r = clamp(intensity + g_ambient_light.r, 0.0f, 1.0f);
|
||||||
output.g *= intensity + g_ambient_light.g;
|
f32 g = clamp(intensity + g_ambient_light.g, 0.0f, 1.0f);
|
||||||
output.b *= intensity + g_ambient_light.b;
|
f32 b = clamp(intensity + g_ambient_light.b, 0.0f, 1.0f);
|
||||||
|
|
||||||
|
output.r *= r;
|
||||||
|
output.g *= g;
|
||||||
|
output.b *= b;
|
||||||
|
|
||||||
return (FragmentResult){.colour = output};
|
return (FragmentResult){.colour = output};
|
||||||
}
|
}
|
||||||
@ -166,7 +170,25 @@ internal FragmentResult albedo_shader_fragment(void *shader,
|
|||||||
const V3f *barycentric,
|
const V3f *barycentric,
|
||||||
const Colour *colour,
|
const Colour *colour,
|
||||||
const Model *model) {
|
const Model *model) {
|
||||||
return (FragmentResult){.colour = *colour};
|
Shader *shdr = (Shader *)shader;
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
M3x2f uvs = {shdr->vertices[0].uv, shdr->vertices[1].uv, shdr->vertices[2].uv};
|
||||||
|
M2x3f uv_mat = mat3x2_transpose(uvs);
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
V2f uv = mat2x3_mul_vec3(uv_mat, (*barycentric));
|
||||||
|
|
||||||
|
Colour output;
|
||||||
|
if (model->texture) {
|
||||||
|
u64 tx_x = uv.u * model->texture->width;
|
||||||
|
u64 tx_y = uv.v * model->texture->height;
|
||||||
|
output = get_pixel(Colour, model->texture, tx_x, tx_y);
|
||||||
|
} else {
|
||||||
|
output = *colour;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (FragmentResult){.colour = output};
|
||||||
}
|
}
|
||||||
|
|
||||||
internal M4x4f get_projection_matrix(ProjectionType projection_type) {
|
internal M4x4f get_projection_matrix(ProjectionType projection_type) {
|
||||||
|
Loading…
Reference in New Issue
Block a user