diff --git a/src/Engine.Graphics/Loaders/ObjLoader.cs b/src/Engine.Graphics/Loaders/ObjLoader.cs
index a7acbc9..9644180 100644
--- a/src/Engine.Graphics/Loaders/ObjLoader.cs
+++ b/src/Engine.Graphics/Loaders/ObjLoader.cs
@@ -3,7 +3,6 @@ using Engine.Core;
using Engine.Core.Components;
namespace Engine.Graphics.Loaders;
-
///
/// Minimal OBJ loader.
///
@@ -66,6 +65,8 @@ public static class ObjLoader
var faceIndices = new List();
faceNormals.Clear();
+ var hasNormals = false;
+
for (int i = 1; i < parts.Length; i++)
{
var sub = parts[i].Split('/');
@@ -76,13 +77,27 @@ public static class ObjLoader
if (sub.Length > 2 && !string.IsNullOrEmpty(sub[2]))
{
normal = normals[int.Parse(sub[2]) - 1];
+ hasNormals = true;
}
vertices.Add(new Vertex(pos, color, normal));
faceIndices.Add((uint)(vertices.Count - 1));
}
- // Triangulate as a fan.
+ if (!hasNormals && faceIndices.Count >= 3)
+ {
+ var a = vertices[(int)faceIndices[0]].Position;
+ var b = vertices[(int)faceIndices[1]].Position;
+ var c = vertices[(int)faceIndices[2]].Position;
+ var faceNormal = MeshMath.ComputeFaceNormal(a, b, c);
+ for (int i = 0; i < faceIndices.Count; i++)
+ {
+ var v = vertices[(int)faceIndices[i]];
+ v.Normal = faceNormal;
+ vertices[(int)faceIndices[i]] = v;
+ }
+ }
+
for (int i = 2; i < faceIndices.Count; i++)
{
indices.Add(faceIndices[0]);