mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-10 13:00:29 +03:00
3DFileViewer: Calculate face-normal from vertex-normals of the triangle
This change calculates the face-normal of the triangle by adding the three vertex-normals and then normalizing. This results in an average of the three vertex-normals.
This commit is contained in:
parent
5fd58a2663
commit
ed41f48ea4
Notes:
sideshowbarker
2024-07-18 01:12:22 +09:00
Author: https://github.com/pmhpereira Commit: https://github.com/SerenityOS/serenity/commit/ed41f48ea40 Pull-request: https://github.com/SerenityOS/serenity/pull/10801
@ -58,10 +58,30 @@ void Mesh::draw(float uv_scale)
|
||||
m_vertex_list.at(triangle.c).y,
|
||||
m_vertex_list.at(triangle.c).z);
|
||||
|
||||
// Compute the triangle normal
|
||||
const FloatVector3 vec_ab = vertex_b - vertex_a;
|
||||
const FloatVector3 vec_ac = vertex_c - vertex_a;
|
||||
const FloatVector3 normal = vec_ab.cross(vec_ac).normalized();
|
||||
FloatVector3 normal;
|
||||
if (has_normals()) {
|
||||
const FloatVector3 normal_a(
|
||||
m_normal_list.at(triangle.normal_index0).x,
|
||||
m_normal_list.at(triangle.normal_index0).y,
|
||||
m_normal_list.at(triangle.normal_index0).z);
|
||||
|
||||
const FloatVector3 normal_b(
|
||||
m_normal_list.at(triangle.normal_index1).x,
|
||||
m_normal_list.at(triangle.normal_index1).y,
|
||||
m_normal_list.at(triangle.normal_index1).z);
|
||||
|
||||
const FloatVector3 normal_c(
|
||||
m_normal_list.at(triangle.normal_index2).x,
|
||||
m_normal_list.at(triangle.normal_index2).y,
|
||||
m_normal_list.at(triangle.normal_index2).z);
|
||||
|
||||
normal = (normal_a + normal_b + normal_c).normalized();
|
||||
} else {
|
||||
// Compute the triangle normal
|
||||
const FloatVector3 vec_ab = vertex_b - vertex_a;
|
||||
const FloatVector3 vec_ac = vertex_c - vertex_a;
|
||||
normal = vec_ab.cross(vec_ac).normalized();
|
||||
}
|
||||
|
||||
// Compute lighting with a Lambertian color model
|
||||
const auto light_intensity = max(light_direction.dot(normal), 0.f);
|
||||
|
@ -27,6 +27,8 @@ public:
|
||||
|
||||
bool is_textured() const { return m_tex_coords.size() > 0; }
|
||||
|
||||
bool has_normals() const { return m_normal_list.size() > 0; }
|
||||
|
||||
private:
|
||||
Vector<Vertex> m_vertex_list;
|
||||
Vector<TexCoord> m_tex_coords;
|
||||
|
Loading…
Reference in New Issue
Block a user